.Net Core WebApi解析jwt攜帶的payload信息


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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM