• .net core使用官方CookieAuthentication身份验证


    注入:

        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]

    例:

  • 相关阅读:
    WPF 命令基础
    委托 C#
    Volley网络请求框架的基本用法
    MailOtto 实现完美预加载以及源码解读
    Android_时间服务
    Android_Chronometer计时器
    Android_Json实例
    完结篇
    就快完结篇
    MySQL 选出日期时间最大的一条记录
  • 原文地址:https://www.cnblogs.com/Cein/p/9009284.html
Copyright © 2020-2023  润新知