Azure API 管理 + Azure 函数和托管标识

Posted

技术标签:

【中文标题】Azure API 管理 + Azure 函数和托管标识【英文标题】:Azure API Management + Azure Function and managed identity 【发布时间】:2020-05-02 14:17:25 【问题描述】:

我正在尝试使用托管标识从 API 管理实例调用 Azure 函数。 我已为我的 APIM 实例设置了系统托管标识。 我已在 Azure Function App 上向此身份授予参与者角色。 我还将应用服务身份验证更改为 AD。

现在我正在尝试从 API 调用该函数。

我有两个问题:

    第一个:使用authentication-managed-identity策略获取token时,使用观众https://myfunctionapp.azurewebsites.net时出错。 AD 告诉我此应用未在租户中注册 第二:如果我检索https://management.azure.com 的令牌,我得到了一个令牌,但我收到了来自 Azure 函数的 401 Unauthorized 错误。

也许我只是想在错误的受众上获取令牌,但不幸的是,文档中没有列出函数的受众(例如,对于服务总线,有一个通用的 URI 可以使用,也用于 KeyVault,. ..)。

我想我可能错过了图片中的某些内容... 谢谢。

【问题讨论】:

【参考方案1】:

您需要使用authentication-managed-identity 策略使用 API 管理服务的托管标识向后端服务进行身份验证。

https://docs.microsoft.com/en-us/azure/api-management/api-management-authentication-policies#ManagedIdentity

编辑

1-在 Azure AD 上的 APIM 应用程序中, 获取为企业应用程序分配的应用程序 ID。

2-然后转到 Azure Function App 中的平台功能,然后单击身份验证/授权。

3-选择Azure Active Directory作为身份验证提供者,管理模式为“express”。

4-返回身份验证管理身份策略,将步骤 1 中的应用程序 ID 设置为资源。

【讨论】:

这正是我所做的,但正如我在帖子中所说,当我使用我的函数的 App URI ID 时,我无法获得令牌,它告诉我应用程序不是在租户中注册(这是错误的,因为我可以在租户中看到它)。 应该使用Application ID而不是Object ID 基于这个答案,我创建了带有说明的简短帖子:kalcik.net/2020/04/15/… 这篇最近的博文也可能会有所帮助:mikaelsand.se/2021/09/…【参考方案2】:

您需要在 apim 所需资源中添加 url。如果您打算使用委托流程。要检查问题是否与 url 注册有关,您可以改用 AppId。这至少会告诉您是否可以检索令牌。

【讨论】:

以上是关于Azure API 管理 + Azure 函数和托管标识的主要内容,如果未能解决你的问题,请参考以下文章

正文未通过 Azure API 管理发送

无法对 Azure 上的 API 管理执行资源所有者密码 OAuth2 身份验证

通过 APIM 使用 Azure 功能的 REST URL

Azure API 管理:使用 Oauth2 401 的授权给出“未经授权。访问令牌丢失或无效。”

Azure API管理与逻辑功能

没有 user_impersonation 的 Azure 资源管理 API,可以吗?