发送Rest请求时如何从ASP.NET身份获取UserID

时间:2018-05-22 06:57:40

标签: c# asp.net-web-api

我有一个使用ASP.NET身份的API,一旦token生成如下,我就很容易获得UserId

HttpContext.Current.User.Identity.GetUserId().ToString())

现在我有一个外部应用程序尝试使用此API进行身份验证,但我需要生成token的用户的UserId

当我向http://myapiURL/token发送请求时,我会收到以下内容

  1. access_token
  2. token_type
  3. expires_in
  4. userName
  5. 发布
  6. 到期
  7. 当我使用生成的API/Account/UserInfo发送获取token的请求时,我会收到以下内容

    1. 电子邮件
    2. HasRegistered
    3. LoginProvider
    4. 问题如何获取UserId

      我有两个选择,

      A。我修改UserInfoViewModel GetUserInfo()以在UserInfoViewModel中拥有UserId?

      B。我在ApiController中创建了一个新方法,例如GetUserId(API/Account/GetUserId),它运行HttpContext.Current.User.Identity.GetUserId().ToString())并发回 用户ID

      还有其他办法吗?

      干杯

1 个答案:

答案 0 :(得分:1)

我相信你想在/ Token的响应中使用UserId。

默认情况下,Identity不会在响应中添加UserId。

因此您需要在方法GrantResourceOwnerCredentials

中的ApplicationOAuthProvider.cs中手动添加它
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);
        }