Identity.GetUserId()如何找到用户ID?

时间:2016-02-29 15:34:03

标签: asp.net asp.net-mvc asp.net-identity

问题

User.Identity.GetUserId()如何找到当前用户的ID?

它是否从Cookie中找到用户ID,还是查询数据库?还是其他任何方法?

问题

出于某种原因,当我向Http请求标头添加有效User.Identity.GetUserId()并将请求发送到我的控制器端点时,null会返回Bearer Token

// MVC Controller Action Method

[Authorize]
public HttpResponseMessage(UserInfoViewModel model)
{
    // Request passes the Authorization filter since a valid oauth token 
    // is attached to the request header.

    string userId = User.Identity.GetUserId();

    // However, userId is null!

    // Other stuff...
}

3 个答案:

答案 0 :(得分:4)

  

User.Identity.GetUserId()如何找到当前用户的ID?

ClaimTypes.NameIdentifier是User.Identity.GetUserId()函数使用的声明

您需要在授权码中添加声明,

identity.AddClaim(ClaimTypes.NameIdentifier, user.Id);

身份属于ClaimIdentity类型。

答案 1 :(得分:3)

当用户登录您的应用程序时,服务器使用ASP.NET Identity验证您的用户使用DB并创建返回UI的有效令牌。此令牌在其到期时有效,并且包含验证和授权用户所需的所有信息,包括用户的ID。从客户端到服务器端的下一次调用必须在http请求头中使用此令牌完成,但服务器不会再次调用DB,因为ASP.NET身份知道如何解密令牌并获取用户的所有信息。 / p>

使用cookie只是将令牌存储在客户端的一种方法。正如我在上面评论的那样,您必须在登录后的下一个请求中发送令牌,这样您就可以将此令牌存储在cookie中或浏览器中的会话存储中。

答案 2 :(得分:1)

首先,请确保您不允许未经过身份验证的用户。

之后,您需要解析必须配置的承载令牌。

你需要这个包Microsoft.Owin.Security.OAuth

在启动时,如果必须将ASP.NET身份配置为使用承载身份验证:

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions {
    // your options;
});

可能在您的StartupAuth.cs文件