开发了一个React应用程序,它需要用访问令牌调用两个不同的API。应用程序的代码用于验证反应-aad-msal库。最初,应用程序只调用了一个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:为输入参数范围提供的值无效,因为它包含多个资源。
对下列事项感兴趣:
任何澄清或想法都是非常感谢的,谢谢!
发布于 2020-01-17 08:30:29
顺便说一句,有2级API的体系结构通常是首选的选择,当然,这可能超出了您当前问题的范围:
在这个设置中,每个UI只需要调用一个API,而与从多个来源获取数据相关的OAuth工作就更简单了。
发布于 2020-01-17 06:12:49
如何正确地获得另一个访问令牌以发送到另一个API?
遗憾的是,我不知道如何在图书馆的上下文中这样做。通常,在acquireTokenSilent对象上调用UserAgentApplication两次。
用户不应该被两次重定向到登录页面吗?
不是的。指定登录重定向的两个作用域。然后,您可以在没有用户交互的情况下,使用acquireTokenSilent静默地获得两个令牌。
这种情况能否在一个请求中得到处理?
见上文,您需要调用登录一次和acquireTokenSilent两次。
https://stackoverflow.com/questions/59779011
复制相似问题