.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]

例:

 

转载于:https://www.cnblogs.com/Cein/p/9009284.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET Core Authorization是一个集成在ASP.NET Core中的授权框架,可以用来实现身份验证和授权。下面介绍如何使用ASP.NET Core Authorization来实现身份验证和授权。 1. 配置身份验证 在Startup.cs文件中的ConfigureServices方法中添加以下代码来配置身份验证: ``` services.AddAuthentication(options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])) }; }); ``` 这段代码使用JWT来进行身份验证,需要提供一个密钥作为签名,可以在appsettings.json中配置。 2. 在控制器中添加授权 在需要授权的控制器或方法上添加Authorize特性来限制访问: ``` [Authorize(Roles = "admin")] public class AdminController : Controller { // ... } ``` 这段代码限制只有拥有admin角色的用户才能访问AdminController。 3. 配置授权策略 通过配置授权策略,可以更细粒度地控制访问权限。在Startup.cs文件的ConfigureServices方法中添加以下代码: ``` services.AddAuthorization(options => { options.AddPolicy("RequireAdminRole", policy => policy.RequireRole("admin")); }); ``` 这段代码配置了一个名为RequireAdminRole的策略,要求用户必须拥有admin角色才能访问。 在控制器或方法上使用Authorize特性指定授权策略: ``` [Authorize(Policy = "RequireAdminRole")] public class AdminController : Controller { // ... } ``` 这段代码限制只有拥有admin角色的用户才能访问AdminController。 以上就是使用ASP.NET Core Authorization来实现身份验证和授权的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值