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

WSO2 ESB调用SAML保护服务遇ErrorInObtainingToken错误求助

解决方案:WSO2 ESB调用SAML保护服务时ErrorInObtainingToken问题处理

根据你提供的错误日志和流程描述,问题核心是第二步调用业务服务时,ESB错误地触发了向业务服务请求令牌的逻辑,而业务服务不支持requestSecurityToken操作,导致出现Message Receiver not found错误。以下是针对性解决步骤:

1. 修正业务服务的策略配置

你当前可能错误地将STS的签发方策略应用到了业务服务上,导致ESB试图向业务服务发起令牌请求。业务服务需要的是SAML令牌验证策略,而非令牌获取策略:

  • 移除业务服务策略中的<sp:IssuedToken>配置(该配置会触发STS调用),替换为<sp:SAMLSenderToken>,指定直接使用已获取的SAML令牌:
    <sp:SAMLSenderToken>
        <wsp:Policy>
            <sp:WssSamlV20Token11/>
        </wsp:Policy>
    </sp:SAMLSenderToken>
    
  • 确保策略中仅包含令牌验证相关配置,不要包含STS地址、密钥等签发方参数。

2. 正确存储与复用已获取的SAML令牌

第一步成功获取SAML令牌后,需要将其存储到ESB上下文,第二步调用业务服务时直接引用:

  • 在第一步STS调用成功后,使用<property> mediator将SAML令牌保存到message context:
    <property name="SAML_TOKEN" expression="//wsse:Security/wsse:Assertion" scope="default"/>
    
  • 第二步调用业务服务前,使用<enrich> mediator将令牌插入到wsse:Security头中:
    <enrich>
        <source type="property" property="SAML_TOKEN"/>
        <target type="header" action="set" xpath="//wsse:Security"/>
    </enrich>
    
  • 添加时间戳:使用WSO2的<timestamp> mediator自动生成符合WS-Security标准的时间戳头:
    <timestamp expires="300"/>
    

3. 排查端点与代理配置错误

  • 检查业务服务的代理/端点配置,确保其出站策略未关联STS获取逻辑。错误日志中请求的http://localhost:8280/.../token是业务服务端点,而非STS,说明策略中的STS地址被错误指向了业务服务。
  • 确保第一步调用STS的代理和第二步调用业务服务的代理是独立配置的,各自关联对应的策略(签发方策略给STS代理,消费方策略给业务服务代理)。

4. 调试与验证令牌传递

  • 启用ESB的DEBUG日志,查看message context中的令牌内容是否正确:
    <log level="custom">
        <property name="SAML_Token_Content" expression="get-property('SAML_TOKEN')"/>
    </log>
    
  • 使用SOAPUI等工具捕获第二步的请求,验证wsse:Security头是否包含完整的SAML断言和时间戳,格式是否符合业务服务的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:05:26