.net core添加JWT授权
在startup中ConfigureServices方法内部增加:
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "swaggerTest", Version = "v1" }); c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme() { Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer { token }\"", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.Http, Scheme="Bearer", BearerFormat = "JWT", }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference=new OpenApiReference() { Id="Bearer", Type=ReferenceType.SecurityScheme } }, new string[]{} } }); }); services.AddAuthentication(option => { option.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; option.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateAudience = true, ValidAudience = "Audience", ValidateIssuer = true, ValidIssuer = "Issuer", ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SigningKeySigningKeySigningKeySigningKey")), ValidateLifetime = true, // 缓冲过期时间,总的有效时间等于这个时间加上jwt的过期时间,如果不配置,默认是5分钟 //ClockSkew = TimeSpan.FromMinutes(1) }; });
在Configure中添加
app.UseAuthorization();中间件
在控制器前面加入[Authorize]
然后去请求接口返回jwt验证信息,返回给前端
[AllowAnonymous] [HttpPost("Login")] public IActionResult Login(string username,string password) { var identifier = username.ToString(); var role = password.ToString(); var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme); identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, "NAME")); identity.AddClaim(new Claim(ClaimTypes.Role, "ROLE")); var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SigningKeySigningKeySigningKeySigningKey")); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var tokenDescriptor = new SecurityTokenDescriptor { Audience = "Audience", Issuer = "Issuer", Subject = identity, Expires = DateTime.Now.AddHours(4), SigningCredentials = creds, }; var tokenHandler = new JwtSecurityTokenHandler(); var token = tokenHandler.CreateToken(tokenDescriptor); var tokenRes = tokenHandler.WriteToken(token); return Ok(tokenRes); }
然后到这里就可以去swagger上去测试jwt验证信息了