thi*_*im9 1 asp.net jwt asp.net-web-api2
我正在尝试使用将令牌字符串转换为jwt令牌JwtSecurityTokenHandler
。但是说那是错误的
IDX12709:CanReadToken()返回false。JWT的格式不正确:“ [[PII隐藏]”。\ n令牌必须采用JWS或JWE Compact序列化格式。(JWS):“ EncodedHeader.EndcodedPayload.EncodedSignature”。(JWE):“ EncodedProtectedHeader.EncodedEncryptedKey.EncodedInitializationVector.EncodedCiphertext.EncodedAuthenticationTag”。
我该如何解决这个问题?
这是我的令牌
。
var tokenHandler = new JwtSecurityTokenHandler();
var jwtToken = tokenHandler.ReadToken(token) as JwtSecurityToken;
Run Code Online (Sandbox Code Playgroud)
调用Web API
using (HttpClient client = new HttpClient())
{
string path = "UserMaintenance/ValidateUserId?userid=" + txtUsername.Text.Trim().ToString();
client.BaseAddress = new Uri(GlobalData.BaseUri);
client.DefaultRequestHeaders.Add("Authorization", "Bearer" + GlobalData.Token);
HttpResponseMessage response = client.GetAsync(path).Result;
if (response.IsSuccessStatusCode)
{
var value = response.Content.ReadAsStringAsync().Result;
isValid = JsonConvert.DeserializeObject<bool>(value);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的GetPrincipal方法
public static ClaimsPrincipal GetPrincipal(string token)
{
try
{
var symmetricKey = Convert.FromBase64String(Secret);
var validationParameters = new TokenValidationParameters()
{
RequireExpirationTime = true,
ValidateIssuer = false,
ValidateAudience = false,
IssuerSigningKey = new SymmetricSecurityKey(symmetricKey)
};
var handler = new JwtSecurityTokenHandler();
handler.InboundClaimTypeMap.Clear();
SecurityToken securityToken;
var principal = handler.ValidateToken(token, validationParameters, out securityToken);
return principal;
}
catch (Exception ex)
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的方法,对我有用:
var token = new System.IdentityModel.Tokens.JwtSecurityToken(jwt);
Run Code Online (Sandbox Code Playgroud)
上一行适用于
System.IdentityModel.Tokens.Jwt
软件包版本4.0.0
。正如@Nick所评论的那样,在该软件包的最新版本中,JwtSecurityToken
不再存在于先前的命名空间中,而是存在于该命名空间中,System.IdentityModel.Tokens.Jwt
因此您需要编写:var token = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken(jwt);
除非您的令牌格式不正确。如果您也共享令牌,那将更好。
您还需要从令牌的开头删除“ Bearer”一词(如果尚未删除):
var jwt = context.Request.Headers["Authorization"].Replace("Bearer ", string.Empty);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3432 次 |
最近记录: |