将收到的令牌从一项服务传递到另一项服务

Pass received token from one service to another

我有这个相当简单 use-case:

我想支持以下场景:

所以基本上,服务 B 可以直接由 Angular 客户端或服务 A 调用。在这两种情况下,都必须为其提供 Bearer 令牌才能访问任何 WebAPI 端点。

对于服务 A,我不知道如何存储提供的令牌,以便稍后当我需要使用 HttpClient 调用服务 B 时,我可以设置 Bearer header.

如果我理解正确,您的要求是调用第二个 API(服务 B)作为对 服务 A 的单个请求的一部分 来自经过身份验证的用户。

如果是这种情况,那么我认为没有理由存储令牌server-side,您可以直接从当前请求中取出Authorization header并重新使用它调用 服务 B

一些代码可能有助于解释我的意思,假设 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);
    }
}