rest - 使用 Office 365 REST API OAuth access_token 时出现 SharePoint 错误

标签 rest azure oauth-2.0 office365

我正在开发一个相当简单的应用程序,它使用 REST Office 365 API 从 SharePoint 检索文件。这是一个在后台运行的批处理作业,没有用户界面,因此我正在执行以下简单的两步流程:

(1) 从 Azure AD 请求访问 token (提供客户端 ID、客户端 key 、资源和 grant_type=client_credentials)

(2) 使用“Authorization: Bearer”作为请求 header 调用 SharePoint API (https://{base url}/_api/v1.0/Files)。

这个过程看起来非常简单,听起来也很简单,但我不断收到以下错误:

401 Unauthorized

x-ms-diagnostics:  3001000;reason="There has been an error authenticating the request.";category="invalid_client"

知道问题是什么以及如何解决吗?我已经坚持这个问题好几天了。我真的很感谢有人对此提供帮助。谢谢。

最佳答案

SharePoint Online 尚不支持客户端使用仅应用程序 token (由客户端凭据 OAuth2 流产生)访问它。它仅支持委托(delegate) token ,即用户+应用程序 token (由授权代码 OAuth2 流产生)。

因此,如果您希望编写一个在线访问 SharePoint 的客户端应用程序(Web 应用程序或 native 客户端应用程序) - 它只能代表用户,并且必须涉及用户的交互式身份验证 - 在用户进行身份验证之后- 他们将看到一个同意页面,他们需要同意您的应用程序代表他们访问 O365 API。

只有邮件/日历/联系人 API (Exchange Online) 支持客户端使用仅应用程序 token 访问它们 - 并且他们最近才启用此支持。在此处阅读有关使用 Exchange Online API 的客户端凭据流 token 的信息:http://blogs.technet.com/b/ad/archive/2015/02/04/using-azure-ad-to-build-daemon-applications-that-call-office-365-apis.aspx , http://blogs.msdn.com/b/exchangedev/archive/2015/01/22/building-demon-or-service-apps-with-office-365-mail-calendar-and-contacts-apis-oauth2-client-credential-flow.aspx

希望这有帮助。

ps:OAuth2 客户端凭据流程不发出刷新 token

关于rest - 使用 Office 365 REST API OAuth access_token 时出现 SharePoint 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28355152/

相关文章:

azure - 根据条件设置Azure参数值

oauth-2.0 - 使用代码获取刷新 token 时出现内​​部故障?

spring-boot - 配置 spring-boot-starter-oauth2-client 以使用 Azure AD 进行身份验证

api - Grails Rest API 与适用于移动应用程序的 OAuth

Azure网站: How to manually import application settings from a file

javascript - Node JS,从两个链接同步发出HTTPS请求

azure - "Login failed for user"在 Azure SQL 中为 "The underlying provider failed on Open"

java - 无法在 Spring Boot 2.0.1 中禁用 Spring Security

java - 与远程 Restful 服务的集成测试

java - 使用 REST Client java 连接到 TFS