背景:我的公司正在转向 API 网关来管理我们网络中的所有服务。目前,每项服务均使用 Azure AD 进行身份验证。一切都是单一租户,只允许公司用户。 问题:我的理解正确吗? 问题:当我调用 http:localhost:5000/authResource/get 时,我收到来自 Ocelot 的 401 响应。跟踪错误后,我发现当 Ocelot 身份验证中间件尝试使用 AzureADJwtBearer 方案进行身份验证时,我得到了 null。
我遵循了与 Ocelot 和 azure ad 相关的问题的建议,但即使遵循了这些建议,我也无法让任何东西发挥作用。(主要来自这个答案:How set up Ocelot Api Gateway with Azure Active Directory)我想我可能误解了身份验证应该如何工作。我目前的理解是,我告诉 Ocelot 使用 AzureADJwtBearer 方案针对我的 API 之一进行身份验证。在我的配置中,我有该特定 api 设置的信息(ClientId、TenantId 等)。
一旦我调用该路由,我希望 Ocelot 致电 Microsoft 以开始身份验证。此时,我期望与 API 提供的流程相同,即我拨打电话并获取 Microsoft 登录页面,然后在输入用户名和密码后将我重定向回应用程序。
在将我重定向回 Ocelot 后,我猜(这是我模糊的部分),我希望 ocelot 存储 Microsoft 发回的访问令牌以获取我刚刚请求的特定资源。然后我希望 ocelot 将令牌附加到 Auth 标头,然后发送对我最初请求的资源的请求。
为了澄清这一点,我将包含我的启动文件和 ocelot.json 文件的代码。来自 Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddProtectedWebApi(Configuration)
.AddProtectedApiCallsWebApis(Configuration)
.AddInMemoryTokenCaches(); …Run Code Online (Sandbox Code Playgroud)