我在AppService中托管了一个Angular应用,而两个FunctionApp作为API。所有3个都向Azure AD注册并配置为具有Azure AD身份验证。对于每个FunctionApp,AD用户可以具有不同的appRoles。
已为AppService授予访问两个FunctionApp的权限。
它还配置为在access_token中返回JWT。但是,我只能在AppService的AdditionalLoginParams中将一个应用程序添加为资源。
因此,从AppService调用/.auth/me之后生成的access_token仅针对一个FunctionApp,而对另一个FunctionApp不具有所有权。这意味着我无法从AppService中的Angular代码访问两个FunctionApp。
有什么方法解决此问题并获得access_token(s)访问两个FunctionApp?
答案 0 :(得分:1)
Cannot Share Azure AD Tokens for Multiple Resources
首先想到的是对多个Azure AD资源使用相同的访问令牌。不幸的是,这是不允许的。 Azure AD为特定资源(映射到Azure AD应用程序)颁发令牌。调用AcquireToken时,我们需要提供一个resourceID。结果是令牌只能用于与提供的标识符匹配的资源。
解决方法
要做的事情是使用在初始令牌请求期间获得的刷新令牌来请求对第二个资源的访问令牌。一个访问令牌仅适用于一种资源。没有理由不应该给您的代码增加任何复杂性。 ADAL(或MSAL)负责管理令牌,跟踪哪个令牌用于哪个资源,并在需要时为新资源请求其他访问令牌。
有关更多详细信息,您可以参考此SO issue。