azure - 如何为 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?
解决方案
首先想到的是对多个 Azure AD 资源使用相同的访问令牌。不幸的是,这是不允许的。Azure AD 为特定资源(映射到 Azure AD 应用程序)颁发令牌。当我们调用 AcquireToken 时,我们需要提供单个 resourceID。结果是令牌只能用于与提供的标识符匹配的资源。
解决方法
执行您尝试做的事情的方法是使用您在初始令牌请求期间获得的刷新令牌来请求对第二个资源的访问令牌。一个访问令牌仅适用于一种资源。没有理由这会给您的代码增加任何复杂性。ADAL(或 MSAL)负责管理令牌,跟踪哪个令牌用于哪个资源,并在需要时为新资源请求额外的访问令牌。
有关更多详细信息,您可以参考这个SO issue。
推荐阅读
- python-3.x - 我怎样才能写出更好的“树”(python)
- android - 谷歌播放资源覆盖字符串值
- elasticsearch - 为什么 ES 建议每个索引使用单个映射并且不为此提供任何“加入”功能?
- sql - 如何比较 PL/SQL 中整数值的范围?
- python - why is this pickle implementation not working(ie what am I missing)
- powerbi - 如何创建按选择和切片器过滤的总计?
- php - “类型错误:函数 App\Http\Controllers\UserController::create() 的参数太少,通过了 0,预期正好 1”
- c++ - 如何报告自定义 istream 故障
- django - 反应:如果 CSRF_TOKEN_HTTPONLY 为真,如何获取 Django CSRF 令牌?
- c# - SqlConnection,我使用的是 SQL Server,而不是 LocalDB;那么如何