Azure - 安全 API 应用程序,因此只有逻辑应用程序和 Web 应用程序可以访问

Posted

技术标签:

【中文标题】Azure - 安全 API 应用程序,因此只有逻辑应用程序和 Web 应用程序可以访问【英文标题】:Azure - Secure API App so only accessible to Logic Apps and Web Apps 【发布时间】:2016-10-18 17:01:54 【问题描述】:

我有一个已部署到 Azure 的 API 应用程序,但希望它受到保护,因此它仅可用于同一资源组中的逻辑应用程序和 Web 应用程序。

通过Swashbuckle 添加的 Swagger 接口有一个 api_key 参数,我假设我可以利用某种方式。

关于如何以与 Azure 应用兼容的方式实现这种安全性的任何建议?

Azure AD

我怀疑我应该能够使用 Azure AD 实现这一目标?

我创建了一个 Azure AD 应用程序,然后在 API 应用程序下 身份验证/授权 我启用了 Azure Active Directory (Express) 并选择了我刚刚创建的 Azure AD 应用程序。

现在,当我尝试从逻辑应用程序访问 API 应用程序时,我收到以下错误:

无法获取 swagger。确保您在端点上启用了 CORS 并且正在调用 HTTPS 端点。

(在启用 Azure Active Directory 之前,我不会收到此错误,而是会看到我的端点列表。)

我的下一个想法是编辑 Azure AD 应用程序的清单文件。我在清单中发现了这个

"knownClientApplications": []

所以我尝试像这样添加我的逻辑应用应用程序名称

"knownClientApplications": [ "my-logic-app-name" ]

但这被拒绝了,因为它需要一个 guid 而不是字符串。不幸的是,我似乎找不到我的逻辑应用程序的 guid id。

【问题讨论】:

【参考方案1】:

我找到了有关如何实现此目的的 Azure 文档:

https://azure.microsoft.com/en-us/documentation/articles/app-service-logic-custom-hosted-api/

涉及的一些过程包括直接编辑逻辑应用 json 代码以添加身份验证元素,例如


    ...
    "actions": 
        "SomeAction": 
            "conditions": [],
            "inputs": 
                "method": "post",
                "uri": "https://your-api.azurewebsites.net/api/YourMethod",
                "authentication": 
                    "tenant": "the-guid-for-your-tenant",
                    "audience": "the-guid-for-apiapp-azure-ad-application",
                    "clientId": "the-guid-for-logicapp-azure-ad-application",
                    "secret": "the-secret-for-logicapp-azure-ad-application",
                    "type": "ActiveDirectoryOAuth"
                
            ,
            ...

我遇到的下一个问题是长时间运行的 API 调用导致逻辑应用失败。幸运的是,我发现了 Jeff Hollan 的这篇内容丰富的博文,其中解释了如何解决这个问题:

https://blogs.msdn.microsoft.com/logicapps/2016/02/15/long-running-tasks-in-logic-apps/

带有我适应我的要求的支持代码示例:

https://github.com/jeffhollan/LogicAppsAsyncResponseSample

【讨论】:

以上是关于Azure - 安全 API 应用程序,因此只有逻辑应用程序和 Web 应用程序可以访问的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure 存储帐户表中存储 API 密钥/密码

是否可以在 Azure 函数和 Azure Web API 之间启用托管标识?

您可以在 azure acs 中同时拥有客户端证书安全性和服务身份认证吗

使用 OAuth2.0 或 Azure Active Directory 保护 REST API

Azure 应用服务中托管的 API 列表的单一入口点

Azure api 请求被中止:无法创建 SSL/TLS 安全通道。 http客户端在调用一些web api时