Прямо сейчас у меня есть два 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();
}
Есть ли лучший способ извлечь токен, чтобы я мог передать его по запросу пользовательского гранта?