我需要以编程方式将文件上传到 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 所需的范围