现在我有两个API(假设API1和API2)。我已经将Swagger连接到API1,并且可以进行身份验证。
我刚刚添加了extension grant,以允许API1轻松与API2通信。那也很好。
但是,扩展授权以及随后的自定义授权调用要求访问当前用户令牌。我看到的唯一的 easy 方法是使用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();
}
是否有更好的方法来提取令牌,以便我可以将其传递给自定义授予请求?