我有一个使用ASP.NET身份的API,一旦token
生成如下,我就很容易获得UserId
HttpContext.Current.User.Identity.GetUserId().ToString())
现在我有一个外部应用程序尝试使用此API进行身份验证,但我需要生成token
的用户的UserId
当我向http://myapiURL/token
发送请求时,我会收到以下内容
当我使用生成的API/Account/UserInfo
发送获取token
的请求时,我会收到以下内容
问题如何获取UserId
?
我有两个选择,
A。我修改UserInfoViewModel GetUserInfo()
以在UserInfoViewModel中拥有UserId?
B。我在ApiController
中创建了一个新方法,例如GetUserId(API/Account/GetUserId
),它运行HttpContext.Current.User.Identity.GetUserId().ToString())
并发回
用户ID
还有其他办法吗?
干杯
答案 0 :(得分:1)
我相信你想在/ Token的响应中使用UserId。
默认情况下,Identity不会在响应中添加UserId。
因此您需要在方法GrantResourceOwnerCredentials
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
OAuthDefaults.AuthenticationType);
ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
CookieAuthenticationDefaults.AuthenticationType);
AuthenticationProperties properties = CreateProperties(user.UserName);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
ticket.Properties.Dictionary.Add("UserId", user.Id);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}