0

我需要什么: 我需要使用 Microsoft Graph API 从 Microsoft Teams 频道读取一个 excel 表。
使用以下 URI 可以做到这一点:

https://graph.microsoft.com/v1.0/drives/someId/items/someId/workbook/tables/tableName/rows

问题是,这个端点需要一个有效的令牌。

2个机会

  1. 创建可以访问整个 OneDrive 的 Azure AD 应用程序。

  2. 创建 Azure AD 应用程序以检索有权访问所需文件的服务用户的令牌。

第一个问题是,我不想让它访问整个 OneDrive。我希望它只能访问一个 OneDrive 文件夹。 也许有可能限制对 OneDrive 文件夹的访问?

我用 com.microsoft.aad.msal4j 库尝试了第二种选择:

        String APP_ID = "20106bdc-eec0-493d-b32f-526583aa95a6";
        String AUTHORITY = "https://login.microsoftonline.com/112121a0-cc1f-12af-1213-faaa12ef1b11/v2.0";
        PublicClientApplication pca = PublicClientApplication.builder(
                APP_ID).
                authority(AUTHORITY).build();

        String scopes = "User.Read";
        UserNamePasswordParameters parameters = UserNamePasswordParameters.builder(
                Collections.singleton(scopes),
                userName,
                password.toCharArray()).build();

        IAuthenticationResult result = pca.acquireToken(parameters).get();

但这会导致以下异常:

com.microsoft.aad.msal4j.MsalServiceException:AADSTS7000218:请求正文必须包含以下参数:“client_assertion”或“client_secret”。

有任何想法吗?谢谢

4

2 回答 2

2

对于这个问题,您需要了解ConfidentialClientApplication和之间的区别PublicClientApplication

请参阅公共客户端和机密客户端应用程序

公共客户端应用程序是在设备(例如电话)或台式机上运行的应用程序。他们不被信任来安全地保存应用程序的机密,因此只能以用户的名义访问 Web API(他们只支持公共客户端流)。公共客户端无法保存配置时间机密,因此没有客户端机密。

所以对于PublicClientApplication,我们不需要客户端密码。

您需要做的是(您已从此评论中找到):

Application菜单边栏选项卡中,选择Manifest,然后在清单编辑器中,将allowPublicClient属性设置为true

这里有一个完整的示例,其中包含详细的步骤供您参考。

此外,由于您正在尝试读取 Excel 表格,user.read因此权限是不够的。

根据List rows Permissions,您需要Files.ReadWrite在 Azure AD 应用程序中添加委派权限(应用程序注册)。您还应该在代码中指定它。

于 2020-11-04T02:58:12.583 回答
0

我已经完成的所有步骤,以便它工作:

  1. 我需要访问一个共享文件夹,所以我需要在我的代码中将范围更改为“Files.ReadWrite.All”。

  2. 在应用程序的页面列表中,选择 API 权限,单击添加权限按钮,然后确保选中 Microsoft API 选项卡。在常用的 Microsoft API 部分中,单击 Microsoft Graph。在 Delegated permissions 部分,确保检查了正确的权限:Files.ReadWrite.All。如有必要,请使用搜索框。选择添加权限按钮。

  3. 在应用程序的页面列表中,选择 Manifest,然后在清单编辑器中,将 allowPublicClient 属性设置为 true,然后在清单编辑器上方的栏中选择 Save。

  4. 以租户管理员身份登录到https://portal.azure.com。打开您的应用程序的注册。转到设置,然后转到所需权限。按授予权限按钮。

于 2020-11-04T15:38:09.877 回答