具有 Azure AD 身份验证的 Azure 函数 - 允许的令牌受众不适用于 Microsoft Graph

Posted

技术标签:

【中文标题】具有 Azure AD 身份验证的 Azure 函数 - 允许的令牌受众不适用于 Microsoft Graph【英文标题】:Azure Function with Azure AD Authentication - Allowed Token Audiences not work for Microsoft Graph 【发布时间】:2020-12-09 14:01:11 【问题描述】:

我已使用 Azure AD 身份验证配置 Azure Function,请遵循此文档 - Enable Azure Active Directory in your App Service app。

配置完成后会添加函数app url e.g. https://appname.azurewebsites.netAllowed Token Audiences 如下所示,然后我们可以轻松地使用 client credential flow 获取令牌来调用例如我的函数应用中的 http 触发器。

如果我将 Azure AD Graph 资源 url https://graph.windows.net 添加到 Allowed Token Audiences,我还可以使用此流获取令牌以调用我的函数。

但如果我添加 Microsoft Graph 资源 url https://graph.microsoft.com 并获取令牌以调用该函数,我会得到错误。

您无权查看此目录或页面。

如何解决这个问题?这是Allowed Token Audiences 的正确用法吗?如果不是,为什么https://graph.windows.net 工作正常?

感谢任何想法。

【问题讨论】:

@GovindSharma-MSFTIdentity 我认为他们没有回答我的问题。 【参考方案1】:

如果已添加 Microsoft graph,您能否在 azure AD 中在 api 权限下检查您的应用注册?如果没有,请将其添加为委托权限并试一试。

【讨论】:

谢谢,但我认为这不是诀窍。委托权限不会在客户端凭据流中生效。我的客户端应用程序的 API 权限甚至 AAD Graph 都没有权限,但它适用于 AAD Graph(https://graph.windows.net)。 感谢您的回复,我能够重现这似乎我们得到 401 仅适用于 Microsoft graph 作为一个范围尝试 azure storage 作为它返回 200 的范围。 感谢您的测试,如果是这样,那就太奇怪了,我只想知道为什么它不适用于Microsoft graph。 如果您有一个基本或更高级别的应用服务,您可以在其上打开身份验证/授权,并通过传递带有图形的令牌作为范围来执行对网站的调用,您将能够重现此问题。您可以打开应用程序洞察力,这将帮助我们跟踪所有失败的请求,这可能会为我们提供有关错误的更多信息。我有一个应用程序服务,我能够重现该问题,但由于层is free profiler 被禁用并且不跟踪失败的请求。 此外,如果在您的函数应用上启用了应用洞察,您可以通过日志来检查失败的请求。【参考方案2】:

根据文档,您需要在 Allowed Token Audiences 中提供 Application ID URI。请参考document

如果这是一个云或服务器应用程序,并且您希望允许来自 Web 应用程序的身份验证令牌,请在此处添加 Web 应用程序的应用程序 ID URI。配置的客户端 ID 始终被隐式视为允许的受众。

【讨论】:

嗨 .. 抱歉回复晚了 .. 我完全同意函数应用程序的允许受众应设置为函数应用程序的应用程序 ID uri ......但我们在这里观察到一个异常情况将允许的受众设置为 graph.windows.net,如果我们获得一个目标受众为 graph.windows.net 的令牌,则对功能应用程序的请求成功,而受众是 graph.windows.com,则请求失败并显示 401。

以上是关于具有 Azure AD 身份验证的 Azure 函数 - 允许的令牌受众不适用于 Microsoft Graph的主要内容,如果未能解决你的问题,请参考以下文章

[Azure - Security] Azure的多重身份验证:使用AD(Azure Active Directory)开启用户MFA

使用 Azure AD 承载令牌时身份验证失败,返回容器列表 [Azure Blob] [Azure AD OAuth 2.0] [REST API]

配置了 Azure AD RBAC 的 Azure DevOp Pipelines 对 AKS 的身份验证?

azure 应用服务身份验证模块是不是支持 azure ad b2c?

如何通过 Azure AD B2C 使用身份验证功能在 Azure Web App 上添加身份验证?

使用 KeyVault 和 Azure PowerShell 证书身份验证创建 Azure AD 应用程序