我使用Microsoft.Owin.Security.Jwt nuget包来保护我的webapi。当我将令牌作为标题传递给webapi时,它会按预期设置HttpContext.Current.User。
在封装业务逻辑时,我找不到设置HttpContext.Current.User的那一刻。
我不是一直使用identity.Claims搜索正确的声明,而是想提取我需要的信息,并将自定义类设置为HttpContext.Current.User。是否可以使用Microsoft.Owin.Security.Jwt?
答案 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();
无论您在哪个类别中加入。