我在 ADFS 中配置了 2 个依赖方信任(App1、App2),在用户按照 SAML Web 流程进行身份验证后,最终 App1 得到了一个 SAML 令牌:SamlToken1。
目前的情况是,用户的浏览器由于防火墙无法访问App2,所以App2无法获取SAML token。
我认为的解决方案是通过提供的 issuetokenmixedasymmetricbasic256sha256 Endpoint ADFS 使用 WS-Trust:
步骤 1. 使 App1 充当 WS-Trust 客户端,向 ADFS(端点发出tokenmixedasymmetricbasic256sha256)发送 RST(请求安全令牌),在 SOAP 安全标头中使用 SAMLToken1,将 ApplyTo 设置为 App2。
步骤 2. ADFS 将 RSTR 中的加密 SAML 断言返回给 App1
步骤 3. App1 向 App2 发送另一个 RST,将加密的 SAML 断言设置为安全头。
步骤 4. App2 可以获得 SAML 令牌。
执行第一步时,ADFS 返回“验证消息安全性时发生错误”,ADFS 的跟踪日志仅给出“'urn:oasis:names:tc:SAML:2.0:assertion' 类型的令牌已成功通过身份验证” , ADFS 中不再显示日志。
我正在使用 SOAP UI 进行 SOAP 调用,我想知道如何使用 issuetokenmixedasymmetricbasic256sha256 向 ADFS 发送 SAML 令牌以交换另一个 SAML 令牌。
第一:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:ns="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
<soap:Header>
<a:Action soap:mustUnderstand="1">http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue</a:Action>
<a:To soap:mustUnderstand="1">https://ADFS_URL/adfs/services/trust/13/issuedtokenasymmetricbasic256sha256</a:To>
<o:Security soap:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" ID="_7d723310-961e-417a-bb94-ee32dad0a48c" IssueInstant="2016-11-22T06:03:43.454Z" Version="2.0">**SAML Token 1</Assertion>
</o:Security>
</soap:Header>
<soap:Body>
<trust:RequestSecurityToken xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
<wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<a:EndpointReference>
<a:Address>App2</a:Address>
</a:EndpointReference>
</wsp:AppliesTo>
<trust:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</trust:KeyType>
<trust:RequestType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue</trust:RequestType>
<trust:TokenType>urn:oasis:names:tc:SAML:2.0:assertion</trust:TokenType>
</trust:RequestSecurityToken>
</soap:Body>
</soap:Envelope>