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;