IS4 - лучший способ получить доступ к токену пользователя в API, аутентифицированном с неявным потоком? - PullRequest
0 голосов
/ 11 сентября 2018

Прямо сейчас у меня есть два API (скажем, API1 и API2).У меня Swagger подключен к API1, и я могу отлично проходить аутентификацию.

Я только что добавил расширение , чтобы позволить API1 легко взаимодействовать с API2.Это также прекрасно работает.

Однако для предоставления расширения и последующего вызова пользовательского предоставления требуется доступ к токену текущего пользователя.Единственный простой способ, который я видел, - это приложение MVC, в котором токены сохраняются как часть файла cookie.

В клиенте swagger (неявном потоке) нет файла cookie, из которого я могу извлечь это.Так что сейчас я просто вытаскиваю это из заголовка запроса.Который кажется неуклюжим.

Текущий путь

public async Task<string> API1Action(HttpContext httpContext)
    {
        // THIS IS JANKY
        var token = string.Empty;

        if (httpContext.Request.Headers.TryGetValue("Authorization", out var authValue))
        {
            token = authValue[0].Replace("Bearer ", "");
        }

        // create token client
        var client = new TokenClient("https://localhost:6900/connect/token", "API1", "secret");

        // send custom grant to token endpoint, return response
        var tokenResponse = await client.RequestCustomGrantAsync("delegation", "API2", new { token });

        var getClaimsUrl = new Uri($"api/v1/controller/API2Action", UriKind.Relative);

        var message = new HttpRequestMessage(HttpMethod.Get, getClaimsUrl);
            Client.SetBearerToken(tokenResponse.AccessToken);

        var res = await Client.GetAsync(getClaimsUrl);

        return await res.Content.ReadAsStringAsync();
    }

Есть ли лучший способ извлечь токен, чтобы я мог передать его по запросу пользовательского гранта?

...