JWT(Json Web Token)实现了一种便捷的身份认证方案,我们可以在它的payload中携带一些信息, 例如登录用户的id,角色等信息, 如果这些信息被篡改了,除非对方破解的签发token的securitykey,否则系统在认证身份时是不会通过的,因此可以保证信息的真实性。

那么在webapi中怎样使用这些信息呢?

首先,token是携带在Request Header里的:

string authHeader = this.HttpContext.Request.Headers["Authorization"];

获取到的authHeader的内容是由一个DefaultAuthenticateScheme和token拼接成的,这个DefaultAuthenticateScheme由startup.cs里配置:

services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })

这里使用default值的话,是“Bearer ”。把“Bearer ”替换掉以后,获取到的就是token。

然后对token进行解析:


  string tokenStr = authHeader.Replace("Bearer ", "");
  var handler = new JwtSecurityTokenHandler();
  var payload = handler.ReadJwtToken(tokenStr).Payload;
  var claims = payload.Claims;
 

JwtSecurityTokenHandler()的命名空间为:

using System.IdentityModel.Tokens.Jwt;

最后获取到的claims的类型为IEnumerable<Claim>,根据签发token时设置的内容,就可以读取payload里的信息了:

var userid = claims.First(claim => claim.Type == "userId").Value;

 

 posted on 2020-06-03 14:35  Carroty  阅读(3182)  评论(0编辑  收藏  举报