如果我正确理解,您的要求是调用第二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);
}
}
你能否解释一下为什么你需要存储的令牌服务器端?您是否需要在没有用户干预的情况下执行请求(例如计划任务)? –
假设服务B提供了服务A依赖的某些功能。因此,当用户呼叫服务A时,我想使用相同的令牌(来自服务A)来呼叫服务B.所以基本上服务A使用它所需的令牌,然后通过令牌传递给服务B. –