当我传递多个范围时,Microsoft Graph 权限范围引发错误

2024-05-01

我需要以编程方式将文件上传到 OneDrive。我不会有前端来生成密钥,因为我需要在没有用户交互的情况下生成它们,这就是我的问题。我已经成功地通过一个简单的 POC 做到了这一点,但它必然需要用户交互,因为它使用登录名和密码凭据对 Microsoft 帐户进行身份验证,并且只有在这之后才使用 clientId 和 clientSecret

当我尝试使用生成令牌时@msal-node,它不使用 Azure 中定义的范围。

const msal = require('@azure/msal-node')
const config = require('../config')
const azConfig = {
  auth: {
    clientId: config.azureAppId,
    authority: `https://login.microsoftonline.com/${config.azureTenantId}`,
    clientSecret: config.azureAuthSecret
  }
}

const pca = new msal.ConfidentialClientApplication(azConfig)

return await pca.acquireTokenByClientCredential({
  scopes: [`${config.azureAppId}/.default`]
})

而且我也无法通过新的范围acquireTokenByClientCredential()函数,因为它抛出了一个错误。

const msal = require('@azure/msal-node')
const config = require('../config')
const azConfig = {
  auth: {
    clientId: config.azureAppId,
    authority: `https://login.microsoftonline.com/${config.azureTenantId}`,
    clientSecret: config.azureAuthSecret
  }
}

const pca = new msal.ConfidentialClientApplication(azConfig)

return await pca.acquireTokenByClientCredential({
  scopes: [
    `${config.azureAppId}/.default`,
    'Files.Read'
  ]
})

ServerError: invalid_scope: 70011 - [2021-12-30 01:02:11Z]: AADSTS70011: The provided request must include a 'scope' input parameter. The provided value for the input parameter 'scope' is not valid. The scope api://<azureAppId>/.default Files.Read openid profile offline_access is not valid.

该函数支持的唯一范围是/.default,它不使用 Azure 中添加的权限,当我尝试将范围添加到函数代码中时,它返回一个错误,指出scopes参数无效。

但是,当我使用具有相同凭据的 Postman 生成令牌时,它会起作用并添加访问 OneDrive 所需的范围


很难确切地说如何解决您的问题。我们不知道获取该令牌的目的是什么 - Azure 正在使用身份验证和访问令牌的组合。鉴于您正在定义“Files.Read”范围,您的目标可能是授权用户。

调查后:

https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/2c58d3ff42a04052e16758f5496a30e76b4c39b2/lib/msal-common/docs/request.md https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/2c58d3ff42a04052e16758f5496a30e76b4c39b2/lib/msal-common/docs/request.md

和个人经验,我建议您尝试以下操作:

  1. 明确代币的用途以及实现这一目标的最佳位置(FE/BE)。例如,当用户登录或向后端授权请求时,最佳实践是在前端使用 msal 库(在那里获取身份验证令牌)并将后端隐藏在 API 管理服务后面,并配置其策略以授权基于访问令牌的请求 - 也在前端生成。

  2. 确保您的应用程序 (Web API) 已在 Active Directory 中注册。 Azure 文档从这里开始:https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant

  3. 将相关范围添加到您的注册中:https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-configure-app-expose-web-apis https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-configure-app-expose-web-apis

  4. 在您的代码中,首先为您的范围使用单个值,例如Mail.Read并在尝试多个范围之前先进行测试(即获取令牌)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我传递多个范围时,Microsoft Graph 权限范围引发错误 的相关文章

随机推荐

  • 仅使用 .htaccess 在某些页面上将 http 重写为 https

    我知道关于我的问题有很多话题 我检查了所有这些并尝试了它们 但无法使其工作 我只需要在某些页面上将 http 重写为 https 访问 https 页面后 URL 将返回到 http 这是我到目前为止所拥有的 Rewrite Rules f
  • 使用 MahApps.Metro 时应用程序图标拉伸至标题栏高度

    使用 MahApps Metro 时如何防止应用程序图标拉伸到标题栏的高度 无论使用什么尺寸的图标 图标和标题栏边缘之间都没有空格 我也尝试过使用多尺寸图标 但这不起作用 这是一个开箱即用的示例 强烈启发自mahapps punker76
  • SocketIO ERR_CONNECTION_REFUSED

    我开始使用 NodeJS 和 Socket IO 我正在尝试使用 NodeJS http 服务器设置一个基本示例 并建立到服务器的 Socket IO 连接 我也在使用 Angular JS 基本上我想要的是 当用户按下按钮时 就会建立与服
  • 如何将 JWT 承载令牌添加到 API 的所有请求

    我正在尝试组建一个使用 Asp Net Core Identity Identity Server 4 和 Web API 项目的小项目 我的 MVC 项目已使用 IdS4 进行了正确身份验证 从中我获得了一个 JWT 然后我可以将其添加到
  • 通过 WooCommerce WC_Order_Query 通过元数据获取订单

    如何通过订单号 而不是 ID 获取 WooCommerce 订单 我尝试将 wc get orders 与自定义参数一起使用 例如 wc get orders array number gt 1000 但这似乎不起作用 Thanks 订单号
  • 因子不因式分解绘图的 x 轴标签

    我有一个从 Excel 导入的数据框 其中一列的格式为 dates Oct 17 Nov 17 Dec 17 Jan 18 Feb 18 Mar 18 Apr 18 May 18 Jun 18 Jul 18 Aug 18 所有其他列都只是数
  • ConstraintLayout 内的 ImageView 不起作用

    我在正确显示 ImageView 时遇到问题 我想在 ConstraintLayout 中显示 ImageView 在预览中 它看起来完全符合我的需要 但是当我在设备上启动它时 它看起来完全不同 此布局位于回收视图内 这段代码有什么问题
  • Jasmine 不会从资源管道加载 javascript 文件

    我正在开发一个 gem 并且我已经安装了 Jasminehttps github com pivotal jasmine gem https github com pivotal jasmine gem 我所需的所有 JS 文件都位于 ap
  • Jupyter:禁用重启内核警告

    我使用的是 jupyter 4 1 0 我发现自己经常使用 重新启动并运行全部 功能 每次我使用该按钮时 它都会显示此警告 有没有办法禁用该警告 您可以在笔记本中添加一个单元格并使用以下语句 from IPython core displa
  • 在循环内重新声明 for 循环变量时出错

    考虑以下 C 程序片段 for int i 0 i lt 5 i int i 10 lt Note the local variable printf d i 它编译时没有任何错误 并且在执行时给出以下输出 1010101010 但如果我用
  • ios7 中的自动续订订阅

    我知道这个问题已经被问过很多次了 但没有一个问题对我有帮助 而且我不确定这些答案中哪些在 iOS 7 中仍然有效 我正在做一些带有自动续订订阅的应用程序 我已经成功创建了我的产品 我可以与测试用户一起购买它 我的问题是 检查特定用户是否仍然
  • MouseOver CSS3D效果与javascript

    我正在尝试实现这样的 mouseOver 效果 我能够根据每个图块的位置生成所需的 css3d 矩阵 我通过缓慢的鼠标移动实现了这种效果 但是如果我从一个图块快速移动到另一个图块 则它无法正确更新 它在瓷砖之间显示出间隙 更新鼠标悬停时所有
  • 无法弹出 expo 以做出本机反应

    I want to eject expo to bare react native cli but i can t because I am not able to enter android package name when asked
  • 更好的 cout 又名计数;

    伙计们 编写 countn 会很困难 它基本上会在输入的末尾放置换行符 在使用控制台时 这就是我目前所能做的 我发现每次我希望该行成为新行时都编写 n 非常乏味 或者也许它已经实施了 要避免单行上的多次注入 您可以使用临时对象 该临时对象将
  • 使用 selectExpr 选择其中包含特殊字符的 Spark 数据框列

    我所处的场景是我的列名称Munic pio字母上有重音 My selectExpr命令因此失败 有办法解决吗 基本上我有类似以下的表达式 selectExpr CAST Munic pio as string as Munic pio 我真
  • CSS BETWEEN 选择器?

    我理解 相邻选择器 我想做的是根据元素两侧的 div 上的类来更改元素的样式 例如 div class positive div div class divider div div class negative div 正 和 负 类具有不
  • Kotlin 数据类中可变集合的防御性副本

    我想要一个接受只读列表的数据类 data class Notebook val notes List
  • 为什么 EXC_BAD_ACCESS 如此无用?

    首先我要说的是 我有 Flash AS3 的背景 我意识到 Flash AS3 对大多数事情的要求并不像 iPhone Objective C 那样严格 我怀疑我的问题实际上也适用于 AS3 但让我问它与 Obj c 有关 为什么错误 EX
  • 带有 Grails 的 AOP

    我想在我的 Grails 项目中创建自定义日志记录注释 My code class MyService AuditLog def method1 println method1 called method2 AuditLog def met
  • 当我传递多个范围时,Microsoft Graph 权限范围引发错误

    我需要以编程方式将文件上传到 OneDrive 我不会有前端来生成密钥 因为我需要在没有用户交互的情况下生成它们 这就是我的问题 我已经成功地通过一个简单的 POC 做到了这一点 但它必然需要用户交互 因为它使用登录名和密码凭据对 Micr