我有这个相当简单的用例:
我想支持以下情况:
基本上,服务B可以由Angular客户端直接调用,也可以由服务A调用。在这两种情况下,必须提供一个Bearer令牌才能访问任何WebAPI端点。
从服务A,我不知道如何存储提供的令牌,以便稍后当我需要使用HttpClient
来呼叫服务B时,我可以设置Bearer
标头。
答案 0 :(得分:1)
如果我理解正确,您的要求是将第二个API(服务B )作为来自经过身份验证的用户的服务A 的单个请求的一部分。
如果是这种情况,那么我认为没有理由存储令牌服务器端,您可以从当前请求中取出Authorization
标头并重新使用它来调用服务B 强>
有些代码可能有助于解释我的意思,假设ControllerA
是服务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);
}
}