You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure中使用OBO流获取SAML令牌失败的问题排查

解决AADSTS50013: 断言签名验证失败(密钥未找到)问题

针对你用OBO流获取SAML令牌时遇到的签名验证错误,以下是排查和解决方向:

  • 检查SAML企业应用的签名证书
    登录Azure门户,进入你的SAML企业应用,在「Single sign-on」->「SAML签名证书」页面确认:

    • 证书处于活跃状态,未过期
    • 若使用自定义证书,确保公钥已正确上传到Azure AD,且应用侧持有对应的私钥
    • 避免使用已撤销的证书
  • 确认服务主体的应用权限配置
    你用来获取初始access token的应用注册(服务主体),需要在SAML企业应用的「API权限」中添加应用权限(而非委派权限),并且必须完成管理员同意。权限需对应SAML应用暴露的角色,且状态显示为「已授予管理员同意」。

  • 验证初始access token的签名密钥
    解码第一步获取的access token,查看kid或x5t声明。通过Azure AD的OpenID配置端点https://login.microsoftonline.com/{TENANT_ID}/v2.0/.well-known/openid-configuration获取密钥集,确认其中包含该kid对应的公钥。如果不存在,需重新生成或上传服务主体的密钥/证书。

  • 核对SAML应用的「已知客户端应用」配置
    在SAML企业应用的「属性」页面,确认「已知客户端应用」字段已正确填入你用于OBO交换的应用注册的Client ID,且配置已保存。该设置用于允许指定客户端代表身份请求SAML令牌。

  • 修正OBO请求的客户端凭据
    你的第二个请求中,client_id和client_secret应该是用于OBO交换的应用注册的凭据,而非SAML企业应用的ID和密钥。修正后的代码示例:

# 修正后的OBO请求payload
payload = {
        "client_id": client_id,  # 替换为第一步获取access token的应用注册Client ID
        "client_secret": client_secret,  # 对应第一步的Client Secret
        "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
        "scope": ["<app_id_of_saml_application>/.default"],
        "assertion": access_token, # 第一步获取的access token
        "requested_token_use": "on_behalf_of",
        "requested_token_type": "urn:ietf:params:oauth:token-type:saml2",
    }
authority = f"https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token"
response = requests.post(authority, data=payload)

内容的提问来源于stack exchange,提问作者Jhooma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:02:35