【发布时间】:2021-12-30 00:36:24
【问题描述】:
我需要以编程方式将文件上传到 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 的范围
【问题讨论】:
标签: node.js azure onedrive msal