identityserver 4 получить текущий пользовательский access_token - PullRequest
0 голосов
/ 12 июня 2018

У меня проблемы с получением моего текущего пользователя access_token.Вот мои настройки:

  • QuickstartIdentityServer (QIS) в ядре aspnet, хранилище идентификаторов и EF
  • API (API) в NodeJ.Проверяет токены jwt в заголовке по QIS.
  • угловое приложение SPA, которое отлично работает с QIS и API и выходит за рамки этого вопроса

В разделе QuickstartIdentityServer (QIS) сайт (страница сведений о пользователе), я хотел бы вызвать конечную точку API, используя access_token для проверки подлинности запроса.Я изо всех сил пытаюсь получить access_token текущего пользователя с моего сайта QIS.Всякий раз, когда я звоню HttpContext.GetTokenAsync("access_token"), я получаю нулевое значение.Я видел этот раздел документации IdSrv4: https://identityserver4.readthedocs.io/en/release/quickstarts/5_hybrid_and_api_access.html?highlight=gettokenasync, но, похоже, он применим к клиенту MVC, а не к моему собственному серверу идентификации.

Кто-нибудь может пролить свет на то, как получить access_token моего пользователя?

Спасибо

РЕДАКТИРОВАТЬ

Вот отправная точка, чтобы попытаться лучше объяснить мою проблему: https://github.com/IdentityServer/IdentityServer4.Samples/tree/release/Quickstarts/6_AspNetIdentity/src/IdentityServerWithAspNetIdentity

Начиная сВ этом проекте QIS я хотел бы получить токен доступа зарегистрированного пользователя.Так, например, если я отредактирую HomeController, чтобы добавить этот вызов:

public async Task<IActionResult> Index()
{
     var accessToken = await HttpContext.GetTokenAsync("access_token");
     return View(accessToken);
}

, тогда я смогу вызвать мой NodeJS API с этим токеном в заголовке аутентификации.

Надеюсь, что этолучше объясняет мою проблему.

1 Ответ

0 голосов
/ 13 июня 2018

Таким образом, мне удалось аутентифицировать себя с моим API, используя выделенного Клиента, используя грант клиента и следующий вызов для получения access_token:

        var disco = await DiscoveryClient.GetAsync("http://localhost:5000");
        var tokenClient = new TokenClient(disco.TokenEndpoint, clientId, clientSecret);
        var tokenResponse = await tokenClient.RequestClientCredentialsAsync(scope);

Затем я могу добавить к моему заголовку запроса APIaccess_token возвращается в tokenResponse:

        using(var client = new HttpClient()) {
          client.SetBearerToken(tokenResponse.AccessToken);
          ...
          // execute request
        }

Недостатком является то, что я не могу "выдать себя за" текущий зарегистрированный в IS на стороне API.

...