具有 client_credentials 身份验证的 Daemon 应用程序如何从特定用户获得委托权限?
How can a Daemon application with client_credentials authentication obtain delegated permissions from a specific user?
我编写了一个 java 程序来将文件上传到我作为管理员的 Office 365 开发人员租户中的 Sharepoint。该程序使用 client_credentials 密码进行身份验证。身份验证后,它没有 office 365 身份。
要求是将文件上传到特定文件夹。用户已准备好共享他们的文件夹,但我找不到带有守护程序应用程序的工作流来完成此操作。
管理员可以批准访问用户文件夹的申请吗?
在我的开发者租户中,我拥有 File.ReadWrite.All 的应用程序权限,程序运行良好。但是,我们不会在生产中获得 Files.ReadWrite.All 的批准。问题是我如何使用 File.ReadWrite 的委派权限并验证我的守护程序应用程序,以便我可以将文件上传到一个文件夹。我的应用程序在 Dell Boomi 上运行。谢谢
首先支持申请权限(client_credentials流)上传文件到Sharepoint online
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);
但是如果在生产环境中无法授予Application Permission File.ReadWrite.All
并且无法在daemon app中实现交互式登录,则应考虑ROPC flow。
注意有一个警告:
Microsoft recommends you do not use the ROPC flow. In most scenarios,
more secure alternatives are available and recommended. This flow
requires a very high degree of trust in the application, and carries
risks which are not present in other flows. You should only use this
flow when other more secure flows can't be used.
请参考Username/password provider。
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);
我编写了一个 java 程序来将文件上传到我作为管理员的 Office 365 开发人员租户中的 Sharepoint。该程序使用 client_credentials 密码进行身份验证。身份验证后,它没有 office 365 身份。
要求是将文件上传到特定文件夹。用户已准备好共享他们的文件夹,但我找不到带有守护程序应用程序的工作流来完成此操作。
管理员可以批准访问用户文件夹的申请吗?
在我的开发者租户中,我拥有 File.ReadWrite.All 的应用程序权限,程序运行良好。但是,我们不会在生产中获得 Files.ReadWrite.All 的批准。问题是我如何使用 File.ReadWrite 的委派权限并验证我的守护程序应用程序,以便我可以将文件上传到一个文件夹。我的应用程序在 Dell Boomi 上运行。谢谢
首先支持申请权限(client_credentials流)上传文件到Sharepoint online
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);
但是如果在生产环境中无法授予Application Permission File.ReadWrite.All
并且无法在daemon app中实现交互式登录,则应考虑ROPC flow。
注意有一个警告:
Microsoft recommends you do not use the ROPC flow. In most scenarios, more secure alternatives are available and recommended. This flow requires a very high degree of trust in the application, and carries risks which are not present in other flows. You should only use this flow when other more secure flows can't be used.
请参考Username/password provider。
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);