首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为两个不同的资源和作用域获取带有react-aad-msal的访问令牌。

为两个不同的资源和作用域获取带有react-aad-msal的访问令牌。
EN

Stack Overflow用户
提问于 2020-01-16 22:54:44
回答 2查看 4.1K关注 0票数 0

开发了一个React应用程序,它需要用访问令牌调用两个不同的API。应用程序的代码用于验证反应-aad-msal库。最初,应用程序只调用了一个API,在这里我请求了必要的访问令牌,它的工作原理就像魅力一样。

根据Microsoft文档关于使用权限的规定,该权限声明:

访问令牌只能用于单个资源,但在访问令牌中编码的是应用程序为该资源授予的所有权限。

基于此,我需要请求两个不同的访问令牌,因为资源是不同的,这是显而易见的。

只有一个资源和作用域的工作解决方案:

<AzureAD>包装器创建必要的提供程序:

代码语言:javascript
复制
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>包装器:

代码语言:javascript
复制
<AzureAD provider={AuthenticationService.provider}
         forceLogin={true}>

这里没有问题。

问题:

因此,如果我需要来自不同资源和作用域的两个访问令牌,我会有点困惑,应该如何处理这个场景。

一旦我尝试将其他资源和作用域数组添加到作用域,如下所示:

代码语言:javascript
复制
const authenticationParameters = {
    scopes: [
       'https://<our-app-name>.azurewebsites.net/user_impersonation',
       'https://<tenant-name>.onmicrosoft.com/<api-guid>/access_as_user'
    ],
};

它明显地给出了以下错误消息:

AADSTS28000:为输入参数范围提供的值无效,因为它包含多个资源。

对下列事项感兴趣:

  1. 如何正确地获得另一个访问令牌以发送到另一个API?
  2. 用户不应该被两次重定向到登录页面吗?
  3. 这种情况能否在一个请求中得到处理?

任何澄清或想法都是非常感谢的,谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-17 08:30:29

顺便说一句,有2级API的体系结构通常是首选的选择,当然,这可能超出了您当前问题的范围:

  • 入口点API专注于为您的React应用程序和类似的消费者提供服务--这可能被称为用户体验API。
  • 入口点API调用核心服务来完成真正的工作--这些可能是产品、用户、股票API

在这个设置中,每个UI只需要调用一个API,而与从多个来源获取数据相关的OAuth工作就更简单了。

票数 1
EN

Stack Overflow用户

发布于 2020-01-17 06:12:49

如何正确地获得另一个访问令牌以发送到另一个API?

遗憾的是,我不知道如何在图书馆的上下文中这样做。通常,在acquireTokenSilent对象上调用UserAgentApplication两次。

用户不应该被两次重定向到登录页面吗?

不是的。指定登录重定向的两个作用域。然后,您可以在没有用户交互的情况下,使用acquireTokenSilent静默地获得两个令牌。

这种情况能否在一个请求中得到处理?

见上文,您需要调用登录一次和acquireTokenSilent两次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59779011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档