Google Apps 脚本、Microsoft Graph API 和 OneDrive 集成问题

问题描述 投票:0回答:1

我目前正在开发一个项目,其中使用 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中调整应用程序的权限,但不起作用。

azure google-apps-script oauth-2.0 permissions microsoft-graph-api
1个回答
0
投票

如果用户没有执行该操作的适当权限,通常会出现错误 “您无权在浏览器中打开此文件”

确保向 Microsoft Entra 应用程序授予 委托

Files.Read.All
Microsoft Graph API 权限:

enter image description here

生成的访问令牌:

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

enter image description here

我使用以下参数通过 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

enter image description here

确保解码访问令牌并检查范围是否存在:

enter image description here

通过使用上述访问令牌,我能够成功获取登录用户的驱动器详细信息

GET https://graph.microsoft.com/v1.0/me/drive/root

enter image description here

参考:

获取驱动器-Microsoft Graph v1.0 |微软

© www.soinside.com 2019 - 2024. All rights reserved.