我可以从持有人令牌Web API检索除用户名/身份之外的信息

时间:2018-03-22 09:22:46

标签: c# asp.net asp.net-web-api jwt

我对令牌基础身份验证几乎是新手。我可以从ClaimsPrincipal principal(身份)读取除用户名以外的内容。有没有办法在承载令牌中读/写(存储)其他信息。

</a>

2 个答案:

答案 0 :(得分:4)

存储的附加信息是JWT的有效载荷部分中的所谓声明。 JWT在RFC 7519section 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;
}