1. 程式人生 > >.net core使用官方CookieAuthentication身份驗證

.net core使用官方CookieAuthentication身份驗證

ogg tor 註銷 figure live identity username ims work

註入:

    public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            //services.AddJwtAuthorization(Configuration);

            var types = new[] { typeof(ApplicationModule) };
            services.AddScoped<IIdentityManager, IdentityManager>();
            services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                                .AddCookie(options 
=> { options.LoginPath = new PathString("/login/index"); options.AccessDeniedPath = new PathString("/Error/index"); }); services.AddMvc();
var iservice = services.AddFramework<LiveFactoryDbContext>(opt => { opt.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")); }, types, types); return iservice; }

新建對應類

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.Security.Claims; using System.Text; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; using System.Linq; namespace LiveFactory.Core { public interface IIdentityManager { ClaimsIdentity CreateIdentity(IdentityUser user); Task SignInAsync(IdentityUser user); Task SignOutAsync(); } public class IdentityManager : IIdentityManager { IHttpContextAccessor _contextAccessor; public IdentityManager(IHttpContextAccessor contextAccessor) { _contextAccessor = contextAccessor; } public virtual ClaimsIdentity CreateIdentity(IdentityUser user) { var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme); identity.AddClaim(new Claim(ClaimTypes.PrimarySid, user.Id)); identity.AddClaim(new Claim(ClaimTypes.Name, user.UserName)); return identity; } public virtual async Task SignInAsync(IdentityUser user) { await _contextAccessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(CreateIdentity(user))); } public virtual async Task SignOutAsync() { await _contextAccessor.HttpContext.SignOutAsync(); } } }

登錄註銷

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LiveFactory.Application;
using LiveFactory.Application.Base;
using LiveFactory.Core;
using Microsoft.AspNetCore.Mvc;
//using JFJT.Authorize.IJwtTokenManager;

namespace LiveFactory.Web.Controllers
{
    public class LoginController : Controller
    {
        public readonly IUserService _IUserService;
        public readonly IIdentityManager _identityManager;
        public LoginController(IUserService userService, IIdentityManager identityManager)
        {
            _IUserService = userService;
            _identityManager = identityManager;
        }
        public IActionResult Index()
        {
            return View();
        }

        public async Task<ResultDto<UserDto>> Login(UserDto loginModel)
        {
            var result = _IUserService.Login(loginModel);
            if (result.Success)
            {
                await _identityManager.SignInAsync(new Microsoft.AspNetCore.Identity.IdentityUser() { Id = Guid.NewGuid().ToString(), PasswordHash = result.Data.Password.ToString(), UserName = result.Data.Account.ToString() });
            }
            return result;
        }
        
        public ActionResult LoginOut()
        {
            //_authenticationManager.SignOut();
            _identityManager.SignOutAsync();
            return RedirectToAction("Index");
        }
    }
}

需要驗證的控制器中加入

 [Authorize]

例:

技術分享圖片

技術分享圖片

.net core使用官方CookieAuthentication身份驗證