从JWT Token设置HttpContext.Current.User

时间:2017-01-05 20:21:20

标签: asp.net-web-api oauth-2.0 asp.net-web-api2 owin jwt

我使用Microsoft.Owin.Security.Jwt nuget包来保护我的webapi。当我将令牌作为标题传递给webapi时,它会按预期设置HttpContext.Current.User。

在封装业务逻辑时,我找不到设置HttpContext.Current.User的那一刻。

我不是一直使用identity.Claims搜索正确的声明,而是想提取我需要的信息,并将自定义类设置为HttpContext.Current.User。是否可以使用Microsoft.Owin.Security.Jwt?

1 个答案:

答案 0 :(得分:1)

不太清楚你的意思。 HttpContext.Current.User会在您的令牌有效时自动设置(匹配密码且未过期)。 你可以做的是编写一些扩展方法来检索其他值。例如:

public static class IdentityHelpers
{
    public static string GetUserId(this IIdentity identity) 
    {
        ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;

        if (claimsIdentity.Claims.FirstOrDefault(x => x.Type == "UserId") != null) {
            return claimsIdentity.Claims.FirstOrDefault(x => x.Type == "UserId").Value;
        }

        return "0";
    }

    public static string GetUserName(this IIdentity identity) 
    {
        return identity.Name;
    }
}

然后您可以打电话给例如:

HttpContext.Current.user.GetUserName(); 

HttpContext.Current.User.GetUserId();

无论您在哪个类别中加入。