Как получить идентификатор пользователя из ASP.NET Identity при отправке запроса на отдых - PullRequest
0 голосов
/ 22 мая 2018

У меня есть API, который использует ASP.NET Identity, мне довольно легко получить UserId после того, как token был сгенерирован следующим образом

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

Теперь у меня есть внешнее приложение, котороепытается аутентифицироваться с использованием этого API, но мне нужен UserId пользователя, который сгенерировал token

Когда я отправляю запрос на http://myapiURL/token, я получаю следующее

  1. access_token
  2. token_type
  3. expires_in
  4. userName
  5. выдан
  6. expires

И когда я отправляю запросчтобы получить API/Account/UserInfo с использованием сгенерированного token я получаю следующее

  1. Email
  2. HasRegistered
  3. LoginProvider

Вопрос Как мне получить UserId?

У меня есть два варианта:

A. Я изменяю UserInfoViewModel GetUserInfo(), чтобы иметь UserId в UserInfoViewModel?

B. Я создаю новый метод в ApiController, такой как GetUserId (API/Account/GetUserId), который запускает HttpContext.Current.User.Identity.GetUserId().ToString()) и отправляет обратно UserId

Есть лиДругой путь?

Ура

1 Ответ

0 голосов
/ 22 мая 2018

Я полагаю, что вам нужен UserId в ответе /Token.

По умолчанию Identity не добавляет 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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...