代码之家  ›  专栏  ›  技术社区  ›  Ali Ha Quang

发送REST请求时如何从ASP.NET标识获取用户ID

  •  1
  • Ali Ha Quang  · 技术社区  · 6 年前

    我有一个使用ASP.NET标识的API,一旦 token 已生成如下

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

    现在我有了一个外部应用程序,它试图使用这个API进行身份验证,但我需要生成 令牌

    当我向 http://myapiURL/token 我得到以下信息

    1. 访问\令牌
    2. 令牌类型
    3. 过期
    4. 用户名
    5. 发布
    6. 到期

    当我发出请求 API/Account/UserInfo 使用生成的 令牌 我得到以下信息

    1. 电子邮件
    2. 已注册
    3. 逻辑提供程序

    问题 我怎么得到 UserId ?

    我有两个选择,

    a. 我修改 UserInfoViewModel GetUserInfo() 要在UserInfoViewModel中具有用户ID吗?

    B. 我在中创建了一个新方法 ApiController 如getuserid( API/Account/GetUserId )哪个运行 HttpContext.Current.User.Identity.GetUserId().ToString()) 然后把 用户标识

    还有别的办法吗?

    干杯

    1 回复  |  直到 6 年前
        1
  •  1
  •   Amit Kumar    6 年前

    我相信您希望在/token的响应中使用userid。

    默认情况下,标识不会在响应中添加userid。

    因此,您需要在方法的applicationOAuthProvider.cs中手动添加它。 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);
            }