1

我已经编写了一个 java 程序来将文件上传到我是管理员的 Office 365 开发人员租户中的 Sharepoint。该程序使用带有密钥的 client_credentials 进行身份验证。身份验证后,它没有 Office 365 身份。

要求是将文件上传到特定文件夹。用户已准备好共享他们的文件夹,但我找不到带有守护程序应用程序的工作流来完成此操作。

管理员可以批准应用程序访问用户的文件夹吗?

在我的开发者租户中,我拥有 File.ReadWrite.All 的应用程序权限,并且程序运行良好。但是,我们不会在生产中获得 Files.ReadWrite.All 的批准。问题是如何使用 File.ReadWrite 的委派权限并验证我的守护程序应用程序,以便我可以将文件上传到一个文件夹。我的应用程序在 Dell Boomi 上运行。谢谢

4

1 回答 1

0

首先,支持应用权限(client_credentials flow)在线上传文件到Sharepoint。

ClientCredentialProvider authProvider = new ClientCredentialProvider(
                                                    clientId,
                                                    scopes,
                                                    clientSecret,
                                                    tenant,
                                                    endpoint);

IGraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider(authProvider).buildClient();

byte[] stream = Base64.getDecoder().decode("The contents of the file goes here.");
    graphClient.users("{userId}").drive().items("{item-id}")
    .buildRequest()
    .put(stream);

但是如果在生产环境中不能授予应用权限File.ReadWrite.All,并且不能在daemon app中实现交互式登录,则应该考虑ROPC flow

注意有一个警告:

Microsoft 建议您不要使用 ROPC 流程。在大多数情况下,可以使用并推荐更安全的替代方案。此流程需要对应用程序高度信任,并带有其他流程中不存在的风险。只有在无法使用其他更安全的流程时,您才应该使用此流程。

请参阅用户名/密码提供者

UsernamePasswordProvider authProvider = new UsernamePasswordProvider(
                                                    clientId,
                                                    scopes,
                                                    username,
                                                    password);

IGraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider(authProvider).buildClient();

byte[] stream = Base64.getDecoder().decode("The contents of the file goes here.");
    graphClient.me().drive().items("{item-id}")
    .buildRequest()
    .put(stream);
于 2020-11-20T01:53:31.800 回答