【6】使⽤JWTBearer颁发TOKEN做⽤户权限验证超级
详细教程(附代码)
注:本⽂章使⽤的版本是6 (本⽂易错点,将会⽤此颜⾊字体标出)
什么是JWT,什么是JWT Bearer就不累述了。
中国农业大学校训
第⼀步:对应项⽬安装Microsoft.AspNetCore.Authentication.JwtBearer
第⼆步:appttings.json中,添加JWT的配置,参考代码如下,注意SecretKey不能设置太过简单,否则会报错。
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"JWT": {
"SecretKey": "assdfghkldsf@123!",
"Issuer": "2222",
"Expires": 10,
"Audience": "22333"
}
}
第三步:在Program.cs中,将JWT添加到服务中,参考代码如下,如有报错查看并添加对应using即可。
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true,
ValidIssuer = builder.Configuration["JWT:Issuer"],
ValidateAudience = true,的词语有哪些
ValidAudience = builder.Configuration["JWT:Audience"],
ValidateLifetime = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["JWT:SecretKey"]))
};
});
湿疹是什么原因造成的第四步:在Program.cs中,启⽤认证,添加代码如下,这个必须添加在app.UAuthorization();前⾯,两个名称很像,注意区别。
app.UAuthentication();
第五:在下⾯login接⼝中⽣成token返回⽤户,参考代码如下,⽰例写在了demo中的 WeatherForecastController控制器下,直接粘贴即可运⾏。
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
养殖泥鳅的方法using System.Text;
namespace xxxxxxxxxx.api.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBa
{
private readonly IConfiguration _configuration;
xXXx直播//⼀定要在这⾥注⼊configuration
public WeatherForecastController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet]
[Route("login")]
public string login()
故穿庭树作飞花
{
// 1. 定义需要使⽤到的Claims
var claims = new[]
{
new Claim("Id", "9527"),
new Claim("Name", "Admin")
};
// 2. 从 appttings.json 中读取SecretKey
var cretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JWT:SecretKey"]));
// 3. 选择加密算法
var algorithm = SecurityAlgorithms.HmacSha256;
// 4. ⽣成Credentials
var signingCredentials = new SigningCredentials(cretKey, algorithm);
// 5. 从 appttings.json 中读取Expires
var expires = Convert.ToDouble(_configuration["JWT:Expires"]);
// 6. 根据以上,⽣成token
第二监护人var token = new JwtSecurityToken(
_configuration["JWT:Issuer"], //Issuer
_configuration["JWT:Audience"], //Audience
claims, //Claims,
DateTime.Now, //notBefore
DateTime.Now.AddDays(expires), //expires
signingCredentials //Credentials
);
// 7. 将token变为string
var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
return jwtToken;
}
}
}
注意:claims⾥⾯的内容应该要从外⾯传递进来,动态存⼀些⽤户信息之类的,configuration["JWT:SecretKey"]这种是在读取配置⽂件appttings.json中的配置,configuration要在类的构造函数中注⼊进来。
第六,在对应业务的控制器上,或者控制器下⾯的⽅法上,加上特性[Authorize]在动物园英语
[Route("api/[controller]")]
[ApiController]
[Authorize]
⾄此 6实现了基本的 JWT Bearer认证和授权配置,当然可以进⾏更优的封装。此教学绝对全⽹最详细,⼩⽩只需对照着⼀步⼀步细⼼的做,即可完成功能!