一点背景
我目前正在尝试设置 API 管理器来按照 the MSDN doc. 在混合云环境(AWS 和 Azure)中处理 Azure 中的授权。
我们的环境
我们同时使用 AWS 和 Azure,并且目前已经拥有带有我们 API 的 EC2 实例。我们的 API 也有 swagger,并且应该满足导入器所需的约定。
该 API 是 ASP.NET WebApi2(完整框架版本),并使用 swagger 进行配置。此外,可以从 Azure 看到 ec2 api 端点,因为我们使用 Azure Active Directory 应用程序注册来验证我们的应用程序。
摩擦
目前,我无法对此进行测试,因为我对 Azure 环境的权限有限并且正在等待批准,但我被要求探索这一点。 (你必须喜欢官僚机构)否则,我们将实现 OWIN 和 adal.js 来提供服务到服务和服务到客户端通信,这不会是首选方式。 See this MSDN article for details
询问
是否有可能或者我应该设定走困难路线的期望? 我可以导入从 Azure 外部托管的 APIM 吗?
最佳答案
当然可以。
只需导入 swagger 并添加您的(公共(public))后端 URL —
为了验证 API 管理和外部 API 之间的调用,我看到了三种直接方法:
Integrate API Management with a VNET并通过站点到站点 VPN 调用外部 API(这减少了执行 OAuth 的需要,但需要大量的基础设施设置工作)。嗯,不简单但也不可怕,看看这个 StrongSwan 配置:
conn azure authby=secret type=tunnel leftsendcert=never left=40.127.x.x leftsubnet=10.5.5.0/24 right=172.31.22.44 rightsubnet=10.77.0.0/16 keyexchange=ikev2 auto=start
使用 OAuth 2.0 客户端凭据授予。这被称为 Web App to Web API in Azure AD docs 。我相信this is the relevant API Management guidance 。在这种情况下,API 管理实例成为 secret 客户端(保存 client_id 和 client_secret),获取承载(访问) token 并通过将其包含在
Authorization
中来调用外部 API。 header 。在 API 管理和外部 API 之间使用共享 key 。这不是世界上最安全的东西(它不会像 JWT 那样每小时过期),但也不是闻所未闻。这是处理问题的API key 方式,类似于没有 Diffie、Hellman 或 Merkle 的 Diffie-Hellman key 交换。 。只是爱丽丝和鲍勃分享一个 secret :)
在任何地方都使用 HTTPS,是的,甚至跨 VPN - 考虑请求 header /正文不变性,而不是增加安全性。人们喜欢部署“检查”东西的装置......
关于azure - 我可以导入从 Azure 外部托管的 APIM 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49652533/