开发了一个React应用程序,它需要使用访问令牌调用两个不同的 API。应用程序的代码使用react-aad-msal库进行身份验证。最初,该应用程序已构建为仅调用一个 API,在该 API 中,我请求了必要的访问令牌,其工作原理类似于魅力。
根据有关使用权限的Microsoft 文档,其中指出:
访问令牌只能用于单个资源,但在访问令牌中编码的是您的应用已授予该资源的所有权限。
基于此,我需要请求两个不同的访问令牌,因为资源不同,这很清楚。
只有一种资源和范围的工作解决方案:
<AzureAD>
为包装器创建必要的提供程序:
const config = {
auth: {
authority: process.env.REACT_APP_AUTH_AUTHORITY,
clientId: process.env.REACT_APP_AUTH_CLIENT_ID,
redirectUri: process.env.REACT_APP_AUTH_REDIRECT_URI
},
cache: {
cacheLocation: 'localStorage',
storeAuthStateInCookie: true
}
};
const authenticationParameters = {
scopes: ['https://<our-api-name>.azurewebsites.net/user_impersonation'],
};
// saved to AuthenticationService.provider - logic removed
new MsalAuthProvider(config, authenticationParameters, LoginType.Redirect);
然后将其传递给<AzureAD>
包装器:
<AzureAD provider={AuthenticationService.provider}
forceLogin={true}>
这里没有问题。
问题:
所以我有点困惑如果我需要来自不同资源和范围的两个访问令牌,我应该如何处理这种情况。
一旦我尝试将其他资源和范围添加到范围数组,如下所示:
const authenticationParameters = {
scopes: [
'https://<our-app-name>.azurewebsites.net/user_impersonation',
'https://<tenant-name>.onmicrosoft.com/<api-guid>/access_as_user'
],
};
它显然给出了以下错误消息:
AADSTS28000:为输入参数范围提供的值无效,因为它包含多个资源。
对以下内容感兴趣:
- 我应该如何正确获取其他访问令牌以发送到其他 API?
- 用户不应该被重定向两次到登录页面吗?
- 这种情况可以在一个请求中以某种方式处理吗?
任何澄清或想法表示赞赏,谢谢!