先简单说下JSON Web Token, 然后使用.NET Core内置的JWT验证机制. Demo Source Code AspNetCore JwtBearer Source Code
JWT多用来验证请求的有效性 下面是简单的使用流程
用户post{username, password}到server, 请求token, server生成后返回token得到token后, client端保存token: cookie/sessionStorage/localStorage以后每当发起请求, 将token放到请求头: headers: { ‘Authorization’: token },server收到请求后, 会根据密钥及token中的payload生成新的signature并与token的中signature进行对比, 二者一致则验证通过.NET Core的JWT验证机制基于authentication中间件, 注入JWT服务后, 需要authenrize的请求都会使用token验证 Demo Source Code AspNetCore JwtBearer Source Code
注入内置的JWT service public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(x => { x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(x => { x.RequireHttpsMetadata = false; x.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey("your secret key"), ValidateIssuer = false, ValidateAudience = false }; }); } 生成有效的token var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new[] { new Claim("your token payload") }), // token的有效时间 Expires = DateTime.UtcNow.AddMinutes(), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) };var tokenHandler = new JwtSecurityTokenHandler(); result = tokenHandler.WriteToken(tokenHandler.CreateToken(tokenDescriptor)); 4. 通过属性标签[Authorize]添加token验证的请求 [Authorize]支持class级别和接口级别的指定
[Authorize] public class RepairController : ControllerBase [Authorize] [HttpGet("data")] public ActionResult Get()