.Net Core WepApi-JWT认证

JWT 介绍
JWT(Json Web Token)是一种开放标准,已Json对象的方式在各方之间安全地传输信息
JWT登陆状态不在服务器端进行存储,而是通过秘钥生成一个具有有效时间的Token返回给前端,Token中包含类似用户的Id等信息 ,之后的请求将Token携带到服务器端认证,认证通过后可解析Token拿到用户标识进行后续操作
 
JWT官网地址: https://jwt.io
 
JWT结构:(格式: aaaaaa.bbbb.cccc)
(1)Header
(2)Payload 载荷,存放需要传递的数据(用户信息和认证信息等)
1 JWT 规定了7个官方字段,供选用。
2 1 iss (issuer):签发人
3 2 exp (expiration time):过期时间
4 3 sub (subject):主题
5 4 aud (audience):受众
6 5 nbf (Not Before):生效时间
7 6 iat (Issued At):签发时间
8 7 jti (JWT ID):编号
(3)Signature 签名(防止数据被篡改)
使用编码后(base64编码)的header和payload再加上我们提供的一个公钥,然后使用header中指定的签名算法进行签名。
作用是保证JWT没有被窜改过
 
JWT使用
引用: Microsoft.AspNetCore.Authentication.JwtBearer
1.在“appsettings.json”中配置信息存储:
1 "JwtSettings": {
2     "Issuer": "admin",
3     "Audience": "user",
4     "SecretKey": "dadf4t5gfg6hh6h6h"
5   }
 
2.通过依赖注入,将配置文件注入到我们的类对象中
创建类“ JwtSettings
1 public class JwtSettings
2     {
3         public string Issuer { get; set; }
4         public string Audience { get; set; }
5         public string SecretKey { get; set; }
6     }

在Startup.cs中注入:

1 //ConfigureServices
2 services.Configure<JwtSettings>(Configuration.GetSection("JwtSettings"));
3 JwtSettings setting = new JwtSettings();
4 Configuration.Bind("JwtSettings", setting);
5 JwtHelper.Settings = setting;
6 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
7 
8 //Configure
9 app.UseAuthentication();
 
3.创建JwtHelper.cs生成token
 1 public class JwtHelper
 2     {
 3         private static JwtSettings settings;
 4         public static JwtSettings Settings { set { settings = value; } }
 5         public static string create_Token()
 6         {
 7             var claims = new Claim[] {
 8                                     new Claim(ClaimTypes.Name, "zhangsan"),
 9                                     new Claim(ClaimTypes.Role, "admin"),
10                                     new Claim(ClaimTypes.Sid,"wmcodetypeid")
11                                                         };
12             var key = new  SymmetricSecurityKey(Encoding.UTF8.GetBytes(settings.SecretKey));
13             var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
14             var token = new JwtSecurityToken(
15                             issuer: settings.Issuer,
16                             audience: settings.Audience,
17                             claims: claims,
18                             expires: DateTime.Now.AddDays(1),
19                             signingCredentials: creds);
20             var Token = new JwtSecurityTokenHandler().WriteToken(token);
21             return Token;
22         }
23     }

测试认证:

[HttpPost]
[Authorize]
public string GetOnlineCallerList()
{
    TableData data = new TableData();
    data = _service.GetOnlineCallerList();
    return JsonHelper.Instance.Serialize(data);
}

未在表头添加token认证,状态401

 在表头添加token认证,状态200,返回成功。

猜你喜欢

转载自www.cnblogs.com/ywkcode/p/11909019.html