我对令牌基础身份验证几乎是新手。我可以从ClaimsPrincipal principal(身份)读取除用户名以外的内容。有没有办法在承载令牌中读/写(存储)其他信息。
</a>
答案 0 :(得分:4)
存储的附加信息是JWT的有效载荷部分中的所谓声明。 JWT在RFC 7519和section 4中描述,此rfc描述了标准声明以及使用私人声明名称的可能性。
JWT发行人(授权服务器)也可以向JWT写入附加声明,例如:
var identity = new ClaimsIdentity("JWT");
identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName)); // standard claim
identity.AddClaim(new Claim("myClaim", "myClaimValue")); // private claim
请注意:只有发行人可以向JWT添加信息,并且只能在创建JWT期间完成。
由于JWT的有效负载只是普通的JSON(在base64解码之后),因此您可以阅读所有声明。
查看https://jwt.io/示例。
答案 1 :(得分:1)
您可以使用&#34; user_name&#34;等密钥从持有人令牌中获取任何价值。
private string GetUserName()
{
var claims = (ClaimsIdentity)ClaimsPrincipal.Current.Identity;
if (claims == null)
{
return defaultValue;
}
var targetClaim = claims.FirstOrDefault(c => c.Type == "user_name");
if (targetClaim == null)
{
return defaultValue;
}
return targetClaim.Value;
}