问题
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...
}
答案 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文件
上