【问题标题】:Securing Back end services in Azure API Management using OAuth2 Client Credentials flow使用 OAuth2 客户端凭据流保护 Azure API 管理中的后端服务
【发布时间】:2019-09-15 02:48:53
【问题描述】:

我已经部署了一个 .NET Core Web API 并通过 Azure API 管理提供了访问权限。我现在希望使用 OAuth2 客户端凭据流来保护后端。

我已添加 Azure AD 身份验证,如下所示:

services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
                .AddAzureADBearer(options =>
                {
                    Configuration.Bind("AzureAd", options);
                });

我在 Azure AD 中创建了应用注册和客户端密码,并通过使用以下代码创建令牌并调用 API 来确认它正在工作。

var clientCred = new ClientCredential(clientId, clientSecret);

            var result = await authContext.AcquireTokenAsync(resource, clientCred);

            return result.AccessToken;

是否可以在 Azure API 管理中使用此流程?我希望 Azure API 管理处理获取令牌并传入标头。

我发现最接近的是以下文章,但这似乎涉及 API 传递标头的消费者,这似乎违背了 API 管理订阅功能的要点

https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-protect-backend-with-aad

【问题讨论】:

  • 感谢您的链接。在这种情况下,看起来客户端必须进行身份验证,这与 Microsoft 示例类似。我仍然对两件事感到困惑:1)如果客户端仍在进行身份验证,那么 API 管理订阅密钥的意义何在 2)是什么阻止了客户端直接访问后端服务。我原以为需要一种方法来确保后端 API 只能从 API 管理中调用。除了使用证书或 VNET(这是一项高级功能)之外,我看不到其他方法
  • 据我了解,您尝试的内容并不安全。实际上,客户端应该处理令牌部分并传递给 Azure APIM。

标签: c# azure-active-directory asp.net-core-webapi openid-connect azure-api-management


【解决方案1】:

目前,在 APIM 端执行此操作的唯一方法是使用发送请求策略来执行 OAuth 流。这将要求您提供 APIM 客户端 ID 和密码,但您可以使用命名值来安全地存储它们。

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2020-03-25
    • 2018-12-18
    • 2023-03-10
    • 2012-12-17
    • 2020-12-25
    相关资源
    最近更新 更多