尝试从 Office 365 获取日历时访问令牌验证失败

Posted

技术标签:

【中文标题】尝试从 Office 365 获取日历时访问令牌验证失败【英文标题】:Access token validation failure when trying to get calendars from Office 365 【发布时间】:2017-05-15 07:56:54 【问题描述】:

我目前正在开发一个拥有自己日历的网络服务,并且我正在尝试将此日历与客户端 Exchange 日历同步。 到目前为止,我一直在使用 Outlook 邮件地址 (...@outlook.com) 进行测试,效果很好。

我使用 OAuth 进行身份验证,将客户端重定向到:https://login.microsoftonline.com/common/oauth2/authorize 等...然后检索访问并刷新令牌,然后我尝试使用 GET https://graph.microsoft.com/v1.0/me/calendars 获取客户端的日历并将访问令牌发送到标题。

到目前为止,它与@outlook.com 邮件地址完美配合,但我已经尝试使用 Office 365 地址 (...@mybusiness.onmicrosoft.com) 进行相同的过程,它给了我一个 401 错误:

错误“: "code": "InvalidAuthenticationToken", "message": "访问令牌验证失败。", “内部错误”: “请求 ID”:“48dbe66d-0b82-490b-a84a-8944eaffc8ea”, “日期”:“2017-05-15T07:51:59”

我使用 Postman 使用相同的网址执行相同的工作,但使用的是我通过 Postman 的 OAuth 2 身份验证收到的令牌,并且它有效。我在 web 服务中使用的访问令牌是有效的,所以我不知道为什么它会在 Postman 中工作。

知道为什么它现在不起作用吗?我的应用程序没有在 Azure Active Directory 上注册,而是在 apps.dev.microsoft.com 上注册,它一直运行良好。

谢谢!

【问题讨论】:

【参考方案1】:

问题解决了,我不得不调整数据库中访问令牌的大小。它曾经是一个 VARCHAR(1500),对于 @outlook.com 的令牌来说已经足够了,但 office 365 帐户的访问令牌更长,当我在数据库中注册它时,它被切断了,我只发送了一个访问令牌。

【讨论】:

以上是关于尝试从 Office 365 获取日历时访问令牌验证失败的主要内容,如果未能解决你的问题,请参考以下文章

在没有 Office 365 订阅的情况下使用 Azure 多租户应用程序访问用户日历信息

在 Powershell 中获取 ADFS 令牌

使用来自单个域管理员帐户的O365 REST API访问其他用户日历

使用服务帐户访问其他用户日历

Office 365 轻松上手指南 - Exchange online

使用 EWS 和 OAuth 2 的 Office 365 日历 API