使用本地ADFS认证凭证对接Microsoft Graph的可行性及实现方法问询
可以实现对接Microsoft Graph,核心是通过ADFS 2016+支持的Oauth2.0 On-Behalf-Of(OBO)流完成本地令牌到Azure AD令牌的兑换,具体操作流程如下:
1 前置环境校验
- 本地ADFS版本必须为2016及以上,仅该版本开始支持OBO流与Azure AD的联合令牌兑换能力
- 本地AD需已和Azure AD完成目录同步(配置Azure AD Connect),确保本地AD用户在Azure AD中有对应的同步账户
- ADFS中注册的Web应用主体需同步到Azure AD,或单独在Azure AD注册对应应用并完成信任映射
2 配置Azure AD侧应用权限
- 在Azure AD中注册对应Web应用,为其配置Microsoft Graph所需的委托权限(如读取邮件需配置
Mail.Read权限) - 记录该Azure AD应用的
客户端ID、客户端密钥,用于后续令牌兑换
3 配置本地ADFS侧声明规则
- 打开ADFS管理控制台,找到现有Web应用的信赖方信任配置
- 新增声明规则,确保向Web应用发放的令牌中包含与Azure AD同步一致的用户
userPrincipalName字段,以及ADFS颁发的原始访问令牌作为后续兑换凭证 - 配置ADFS允许该Web应用调用Azure AD令牌端点进行OBO兑换,添加Azure AD服务主体到ADFS允许调用列表
4 本地令牌兑换Graph令牌流程
用户通过ADFS完成身份验证,Web应用拿到ADFS颁发的用户令牌后,按以下规则请求Azure AD兑换Graph令牌:
- 请求方式:POST
- 接口地址:
https://login.microsoftonline.com/{你的Azure AD租户ID}/oauth2/v2.0/token - 核心请求参数:
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer assertion={ADFS颁发的用户令牌} client_id={Azure AD应用客户端ID} client_secret={Azure AD应用客户端密钥} scope=https://graph.microsoft.com/Mail.Read requested_token_use=on_behalf_of
- 解析接口返回的响应,即可获取可用于访问Microsoft Graph的有效访问令牌
5 调用Microsoft Graph
拿到有效令牌后,在请求头中添加Authorization: Bearer {Graph访问令牌},即可直接调用对应Graph接口实现读取邮件等需求。
注意事项
- 本地同步到Azure AD的用户需分配对应Office 365许可证,否则无法调用Graph获取业务数据
- Graph访问令牌默认有效期为1小时,需根据返回的过期时间主动刷新令牌
内容的提问来源于stack exchange,提问作者flip
相关产品推荐
相关产品推荐

