我目前正在开发一个项目,其中使用 Google Apps 脚本与 Microsoft Graph API 交互以访问 OneDrive 文件。但是,我遇到了问题,希望得到一些指导。 我有一个 Google Apps 脚本,它使用 OAuth2 和刷新令牌来获取访问令牌。然后,该脚本尝试使用 Microsoft Graph API 从 OneDrive 文件中获取数据。虽然初始身份验证过程似乎成功(如“成功”日志所示),但对 API 的后续请求会导致 401 错误,并显示以下消息:
{"error":{"code":"FileOpenUserUnauthorized","message":"You do not have permissions to open this file in the browser.","innerError":{"code":"unauthorizedAccessUser"}}}
下面是代码
function main() {
const clientId = "YOUR_CLIENT_ID";
const refreshToken = "YOUR_REFRESH_TOKEN";
let data = {
'client_id': clientId,
'refresh_token': refreshToken,
'redirect_uri': 'https://login.live.com/oauth20_desktop.srf',
'grant_type': 'refresh_token'
};
let params = {
'method': 'post',
'contentType': 'application/x-www-form-urlencoded',
'payload': data,
};
let res = UrlFetchApp.fetch('https://login.microsoftonline.com/common/oauth2/v2.0/token', params);
const tokens = JSON.parse(res.getContentText());
// console.log(tokens['access_token']);
Logger.log('Success');
params = {
headers: {
Authorization: `Bearer ${tokens['access_token']}`
},
};
res = UrlFetchApp.fetch("https://graph.microsoft.com/v1.0/me/drive/root:/Book1.xlsx:/workbook/worksheets/Sheet1/range(address='A1:B6')", params);
if (res.getResponseCode().toString().startsWith('2')) {
const json = JSON.parse(res.getContentText());
let values = json.values;
Logger.log(values);
} else {
console.error()
}
}
我尝试在Azure中调整应用程序的权限,但不起作用。
如果用户没有执行该操作的适当权限,通常会出现错误 “您无权在浏览器中打开此文件”。
确保向 Microsoft Entra 应用程序授予 委托
Files.Read.All
Microsoft Graph API 权限:
生成的访问令牌:
https://login.microsoftonline.com/common/oauth2/v2.0/token
client_id:ClientID
scope:https://graph.microsoft.com/.default offline_access
grant_type:authorization_code
code:code
redirect_uri:https://jwt.ms
client_secret:ClientSecret
我使用以下参数通过 Postman 生成了 访问令牌:
https://login.microsoftonline.com/common/oauth2/v2.0/token
client_id:ClientID
client_secret:ClientSecret
grant_type:refresh_token
refresh_token:RefreshToken
scope:https://graph.microsoft.com/.default offline_access
确保解码访问令牌并检查范围是否存在:
通过使用上述访问令牌,我能够成功获取登录用户的驱动器详细信息:
GET https://graph.microsoft.com/v1.0/me/drive/root
参考: