gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:20:19 25 4
gpt4 key购买 nike

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

当我尝试使用 @msal-node 生成 token 时,它不使用 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 生成 token 时,它会起作用并添加我访问 OneDrive 所需的范围

最佳答案

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

调查后:

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

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

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

  • 确保您的应用程序 (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-configure-app-expose-web-apis

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

  • 关于node.js - 当我传递多个范围时,Microsoft Graph 权限范围引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70526369/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com