У меня есть довольно простой случай использования:
Я хотел бы поддержать следующий сценарий:
Таким образом, в основном, услугу B можно называть либо напрямую, либо с помощью углового клиента, либо службой А. В обоих случаях для доступа к любой из конечных точек WebAPI должен быть предоставлен токен-носитель.
От службы А я не знаю, как хранить предоставленный маркер так, что позже, когда мне нужно использовать HttpClient
для вызова Service BI можно установить Bearer
заголовок.
Если я правильно понял, ваше требование - вызывать второй API (услугу B) как часть одного запроса к службе A от аутентифицированного пользователя.
Если это так, то я считаю, что нет никакой причины хранить маркерную сторону сервера, и вы можете просто взять заголовок Authorization
из текущего запроса и повторно использовать его для вызова службы B.
Некоторый код может помочь объяснить, что я имею в виду, предполагая, что ControllerA
является ControllerA
Service A:
public class ControllerA : ApiController
{
public async Task<IHttpActionResult> GetFromB()
{
var token = Request.Headers.Authorization.Parameter;
MyModel result = null;
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);
var response = await client.GetAsync("http://serviceb/controllerb/actionb");
response.EnsureSuccessStatusCode();
result = await response.Content.ReadAsAsync<MyModel>();
}
return Ok(result);
}
}