使用On-Behalf-Of-Flow获取异常令牌及授权错误问题咨询
On-Behalf-Of流程使用common租户获取异常令牌及AADSTS500202错误排查
问题概述
使用On-Behalf-Of(OBO)流程,以common租户调用/token端点,传入中间层令牌作为assertion,请求范围为openid profile offline_access user.read时,获取到格式异常的访问令牌:正常令牌应以ey...开头,但返回的令牌以EwBoA8l6...开头。该令牌可调用Microsoft Graph的/me端点,但无法调用其他Microsoft API(如GetAllFolders API)。当添加更多请求范围时,触发AADSTS500202错误。
异常令牌示例
{ token_type: 'Bearer', scope: 'User.Read openid profile', expires_in: 2148, ext_expires_in: 2148, access_token: 'EwBoA8l6BAAUAOyDv0l6PcCVu89kmzvqZmkWABkAAcC8ou4ZlNy/KWYLLdVH0vH5mX0MiAuWOx+gxF.............................................................................................................................................................................................................................................9bsbChhpSgTqaDAn2/5e2ol0e+jVUfSFYGNfr45kqBZUoB32Q2HFI1p8wpIdQPOMXfQI=', refresh_token: 'M.C105_BAY.-CW5CZWj8ujA1gjI*WNj2u.........................................................................................................................................Ld5Mv40fbrVowHZdbrDkTPFTaKFidgiAN!qZhx472zJNxxnW0iVOFfQqNtU$', id_token: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJS.........................................................................................................................................................................................................................83ZPxcotsRG-wGV30ULbnXyI8PFg' }
扩展范围时的错误信息
{ error: 'invalid_grant', error_description: "AADSTS500202: 用户账户 '{EmailHidden}' 来自外部身份提供商 'live.com',不支持API版本'2.0'。独立于租户的端点不支持Microsoft账户直通用户和来宾用户。\r\n" }
原因分析
- 异常令牌类型:以
EwBo...开头的令牌是旧格式的ACS令牌,而非现代JWT令牌。这类令牌仅能有限兼容Microsoft Graph的部分端点(如/me),但不支持其他Microsoft API的调用。 - 租户选择错误:
common租户是独立于租户的端点,不支持Microsoft账户(live.com身份提供商)用户的OBO流程调用v2.0版本API,这直接触发了AADSTS500202错误。
解决方案
- 更换租户参数:将请求
/token端点时的租户从common替换为:- 针对Microsoft账户用户:使用
consumers租户 - 针对组织内用户:使用对应的具体租户ID
- 针对Microsoft账户用户:使用
- 指定正确的API范围:请求目标API的专属权限范围,例如调用Exchange Online的GetAllFolders时,使用
https://outlook.office.com/Mail.Read这类明确的API权限,而非通用范围 - 确保获取JWT令牌:如果使用v1.0端点,添加
resource参数指定目标API;如果使用v2.0端点,严格遵循范围格式,确保返回以ey...开头的JWT格式访问令牌
内容的提问来源于stack exchange,提问作者yatin tripathi
相关产品推荐
相关产品推荐

