首页 > 解决方案 > 如何为 Azure AppService 配置 access_token 以允许访问通过 Azure Active Directory 保护的两个 FunctionApp?

问题描述

我有一个 Angular 应用程序托管在 AppService 中,而两个 FunctionApps 用作 API。所有 3 都注册到 Azure AD 并配置为使用 Azure AD 身份验证。AD 用户可以为这些 FunctionApp 中的每一个具有不同的 appRoles。

在此处输入图像描述

AppService 已被授予访问这两个 FunctionApp 的权限。

在此处输入图像描述

它还配置为在 access_token 中返回 JWT。但是,我只能在 AppService 的附加登录参数中添加一个应用程序作为资源。

在此处输入图像描述

因此,从 AppService 调用 /.auth/me 后生成的 access_token 仅对一个 FunctionApp 而不是另一个 FunctionApp 具有声明。这意味着我无法从 AppService 中的 Angular 代码访问这两个 FunctionApp。

有什么办法可以解决这个问题并让 access_token(s) 访问这两个 FunctionApps?

标签: azureazure-active-directoryazure-web-app-service

解决方案


无法为多个资源共享 Azure AD 令牌

首先想到的是对多个 Azure AD 资源使用相同的访问令牌。不幸的是,这是不允许的。Azure AD 为特定资源(映射到 Azure AD 应用程序)颁发令牌。当我们调用 AcquireToken 时,我们需要提供单个 resourceID。结果是令牌只能用于与提供的标识符匹配的资源。

解决方法

执行您尝试做的事情的方法是使用您在初始令牌请求期间获得的刷新令牌来请求对第二个资源的访问令牌。一个访问令牌仅适用于一种资源。没有理由这会给您的代码增加任何复杂性。ADAL(或 MSAL)负责管理令牌,跟踪哪个令牌用于哪个资源,并在需要时为新资源请求额外的访问令牌。

有关更多详细信息,您可以参考这个SO issue


推荐阅读