.Net Core使用JWT进行身份认证
2021-02-02 23:15
标签:生产环境 postman 控制 文件中 builder pat 新建 page pes 新建.net core web的api项目(.net core版本3.1) 在Value控制器下写一个模拟登录接口,进行简单的名字和密码验证即可。验证通过后会返回一个token。 在login接口中的Const.Domain需要新建一个类Const.cs,用来保存密钥 在Startup.cs文件中添加JWT服务 在其后的Configure函数中添加启动中间件 新建一个get接口用于测试JWT验证是否成功 打开PostMan测试登录接口 复制登录接口得到的token,在Headers请求头里添加参数Authorization值为Bearer+空格+token 当把Authorization去掉则会出现401状态码,无权限访问 .Net Core使用JWT进行身份认证 标签:生产环境 postman 控制 文件中 builder pat 新建 page pes 原文地址:https://www.cnblogs.com/tommao2618/p/13127625.html 1 [HttpGet]
2 [Route("api/login")]
3 public IActionResult Login(string userName,string pwd)
4 {
5 if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(pwd))
6 {
7 var claims = new[]
8 {
9 new Claim(JwtRegisteredClaimNames.Nbf,$"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}") ,
10 new Claim (JwtRegisteredClaimNames.Exp,$"{new DateTimeOffset(DateTime.Now.AddMinutes(30)).ToUnixTimeSeconds()}"),
11 new Claim(ClaimTypes.Name, userName)
12 };
13 var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Const.SecurityKey));
14 var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
15 var token = new JwtSecurityToken(
16 issuer: Const.Domain,
17 audience: Const.Domain,
18 claims: claims,
19 expires: DateTime.Now.AddMinutes(30),
20 signingCredentials: creds);
21
22 return Ok(new
23 {
24 token = new JwtSecurityTokenHandler().WriteToken(token)
25 });
26 }
27 else
28 {
29 return BadRequest(new { message = "username or password is incorrect." });
30 }
31 }
1 public class Const
2 {
3 ///
1 public void ConfigureServices(IServiceCollection services)
2 {
3
4 #region JWT验证
5 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
6 .AddJwtBearer(options => {
7 options.TokenValidationParameters = new TokenValidationParameters
8 {
9 ValidateIssuer = true,//是否验证Issuer
10 ValidateAudience = true,//是否验证Audience
11 ValidateLifetime = true,//是否验证失效时间
12 ClockSkew = TimeSpan.FromSeconds(30),
13 ValidateIssuerSigningKey = true,//是否验证SecurityKey
14 ValidAudience = Const.Domain,//Audience
15 ValidIssuer = Const.Domain,//Issuer,这两项和前面签发jwt的设置一致
16 IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Const.SecurityKey))//拿到SecurityKey
17 };
18 });
19 #endregion
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
20 }public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
//开启JWT验证中间件
//.net core3比.net core2多加一个UseAuthentication,而且必须在UseAuthorization前面
//这是认证
app.UseAuthentication();
//这是授权
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
1 [HttpGet]
2 [Route("api/get")]
3 //JWT验证标识
4 [Authorize]
5 public ActionResult
下一篇:前端-jQuery
文章标题:.Net Core使用JWT进行身份认证
文章链接:http://soscw.com/index.php/essay/50152.html