oauth-2.0 - 如何为 Exchange 2016 配置混合模式以使 OAuth2 客户端凭据流与 Microsoft Graph API 一起使用
问题描述
我在客户的 Exchange 2016 上配置了混合模式。现在,用户的邮箱使用个人同意流(授权代码 Oauth2 流)在 Microsoft Graph API 上公开。
使用客户端凭据流获得管理员同意似乎有效:在 Microsoft 端点上检索了一个令牌,有效负载是正确的(正确的范围),但在使用它通过 Microsoft 获取邮箱内容时会触发“未知错误”图形 API。相同的令牌确实可以获取目录信息(这意味着令牌在某些时候有效)。
混合模式是否与客户端凭据流兼容?是否有任何参数需要在 Exchange 中配置以启用此流程?
解决方案
前段时间我偶然发现了同样的问题。让它滑动,因为我认为这是 Exchange 端的一些错误配置。
如果您检查两个令牌,您会发现客户端凭据令牌上缺少 sid,我认为交换需要令牌内的某种本地用户 ID 才能工作。我不确定是否支持此流程,因为我在他们的文档网站上找不到有关此主题的任何信息。
我刚刚发现了一个完全相关的问题,请查看https://stackoverflow.com/a/56108226/639153以获得完整答案。
问题实际上出在其他地方 - Exchange 似乎不支持 client_credentials 流。但是,您可以通过以下 PowerShell 强制执行此操作(确保在应用后重新启动 IIS):
$apps = Get-PartnerApplication
# Microsoft Graph is 2nd item in the array, if you are unsure, list the items by calling $apps first
$apps[1] | Set-PartnerApplication -AppOnlyPermissions $apps[1].ActAsPermissions
完整的解释可以在这里找到:https ://blog.thenetw.org/2019/05/13/using-client_credentials-with-microsoft-graph-in-hybrid-exchange-setup/
推荐阅读
- sql - 如何定义每月的第一天和最后一天
- vba - VBA:将工作表和图形对象导出到一个 PDF 文件中
- java - Kafka-streams 单元测试仅适用于第二次执行
- python - 当我运行它时 Python 没有响应
- javascript - Node.js nvm退出状态145:目录不为空
- swift - SwiftUI:操作未通过切换触发
- java - 找不到类 [org.springframework.boot.autoconfigure.condition.ConditionalOnJava$JavaVersion]
- python - Matplotlib 散点图返回不同版本的不同图
- javascript - 如何使用 JavaScript 添加 CSS?
- javascript - 如何通过javascript检测滚动,并在网页向上滚动时立即恢复原来的样式?