Office 365 客户端凭据中的错误回调授予 OAuth2 流

Posted

技术标签:

【中文标题】Office 365 客户端凭据中的错误回调授予 OAuth2 流【英文标题】:Incorrect callback in Office 365 Client credentials grant OAuth2 flow 【发布时间】:2017-07-15 04:28:44 【问题描述】:

我正在使用此处描述的客户端凭据授予流程https://msdn.microsoft.com/en-us/office/office365/howto/building-service-apps-in-office-365

这是我的初始授权请求: https://login.microsoftonline.com/common/oauth2/authorize?nonce=c43a377e-8b75-4c7f-9fab-300f1dbc76c5&prompt=admin_consent&state=35&redirect_uri=http%3A%2F%2Flocalhost%3A6543%2Fcallback%2Foffice365&response_type=code+id_token&client_id=XXXX&scope=openid

根据文档,我希望在正文中收到带有令牌的 POST 回调。 但我实际上收到了这样的 GET 回调: http://localhost:6543/callback/office365#code=XXXXX&id_token=XXXXX&state=35&session_state=3a2e2c61-7e71-4f11-a9a6-f1dd8f50aeb6&admin_consent=True

我实际上更喜欢 GET 而不是 POST,但是有一个 hash sing # 而不是问号?在 URL 中,因此参数实际上不是 GET 参数。

我可以做些什么来接收有效的回调?

【问题讨论】:

【参考方案1】:

根据规范,OAuth2 支持不同的response modes。 添加response_mode=query 解决了这个问题。这意味着 MS 授权端点默认使用 response_mode=fragment,这在文档中没有明确描述。

【讨论】:

以上是关于Office 365 客户端凭据中的错误回调授予 OAuth2 流的主要内容,如果未能解决你的问题,请参考以下文章

Office 365 API为整天事件返回错误的开始和结束日期时间

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

Spring OAuth2 - 客户端凭据授予类型中的用户信息

客户端无权作为此发件人发送(office 365,grails)

Office 365实现多人在线编辑同一个文档(下)

如何快速安装正版 Microsoft/Office 365 家庭版,附离线安装包