Authorization其目标就是验证Http请求可否经过验证。ASP.Net Core提供了不少种Authorization方式,详细能够参考 微软官方文档。在这里只详细介绍三种方式:ide
Policyui
Middlewarespa
Custom Attribute3d
#region jwt验证 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidIssuer = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:SecretKey"])) }; }); #endregion
#region jwt验证 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidIssuer = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:SecretKey"])) }; }); #endregion #region 受权 services.AddAuthorization(options => { options.AddPolicy("EmployeeOnly", policy => { policy.RequireClaim("EmployeeNumber"); }); }); //如上,咱们定义了一个名称为EmployeeOnly的受权策略,它要求用户的Claims中必须包含类型为EmployeeNumber的Claim。 #endregion
自定义相似jwt的token验证,也就是说直接从header中拿取咱们想要的tokencode
#region jwt验证 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { /*options.TokenValidationParameters = new TokenValidationParameters { ValidIssuer = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:SecretKey"])) };*/ #region 自定义Jwt的token验证 options.SecurityTokenValidators.Clear();//将SecurityTokenValidators清除掉,不然它会在里面拿验证 options.SecurityTokenValidators.Add(new MyTokenValidator()); //自定义的MyTokenValidator验证方法 options.Events = new JwtBearerEvents { //重写OnMessageReceived OnMessageReceived = context => { var token = context.Request.Headers["mytoken"]; context.Token = token.FirstOrDefault(); return Task.CompletedTask; } }; #endregion }); #endregion
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; namespace ZanLveCore { public class MyTokenValidator : ISecurityTokenValidator { bool ISecurityTokenValidator.CanValidateToken => true; int ISecurityTokenValidator.MaximumTokenSizeInBytes { get; set; } bool ISecurityTokenValidator.CanReadToken(string securityToken) { return true; } //验证token ClaimsPrincipal ISecurityTokenValidator.ValidateToken(string securityToken, TokenValidationParameters validationParameters, out SecurityToken validatedToken) { validatedToken = null; //判断token是否正确 if (securityToken != "abcdefg") return null; //给Identity赋值 var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme); identity.AddClaim(new Claim("name", "wyt")); identity.AddClaim(new Claim(ClaimsIdentity.DefaultRoleClaimType, "admin")); var principle = new ClaimsPrincipal(identity); return principle; } } }
其实这种验证方式是 简称 清除验证规则,自定义验证方式jwt
options.SecurityTokenValidators.Clear();//将SecurityTokenValidators清除掉,不然它会在里面拿验证 options.SecurityTokenValidators.Add(new MyTokenValidator()); //自定义的MyTokenValidator验证方法
还有一种方式是 简称 重写验证方式
权限受权Handler的继承AuthorizationHandler的自定义受权类