zoukankan      html  css  js  c++  java
  • .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]

    例:

  • 相关阅读:
    蓝桥杯 大数定理
    蓝桥杯 密码发生器
    简单定时器的使用
    Eclipse中更改Project Explorer的字体
    列的别名修改
    ||拼接字符串
    SQL知识总结
    java 打开记事本
    报表使用分组
    js处理异步问题
  • 原文地址:https://www.cnblogs.com/Cein/p/9009284.html
Copyright © 2011-2022 走看看