【发布时间】: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