我正在尝试使用在密钥斗篷中进行身份验证的SAML配置客户端 提供者通过密钥库经纪人(密钥库提供者和密钥库 经纪人位于不同领域的同一台服务器中)。 客户端是使用keycloak-SAML适配器的wildfly 11。经纪人和提供者 正在使用keycloak 4.1.0。 我已经实现了通过代理连接到SAML的OIDC客户端 提供程序,但我无法使用SAML客户端来完成此操作。
在客户端中,我在wildfly standalone.xml中具有以下配置:
<secure-deployment name="TestClientKeyCloakSAML.war">
<SP entityID="Broker" sslPolicy="EXTERNAL" logoutPage="http://localhost:8280/auth/realms/Broker/protocol/saml">
<Keys>
<Key signing="true">
<PrivateKeyPem></PrivateKeyPem>
<CertificatePem></CertificatePem>
</Key>
</Keys>
<IDP entityID="idp" signatureAlgorithm="RSA_SHA256" signatureCanonicalizationMethod="http://www.w3.org/2001/10/xml-exc-c14n#">
<SingleSignOnService signRequest="true" validateResponseSignature="true" validateAssertionSignature="false" requestBinding="POST" bindingUrl="http://localhost:8280/auth/realms/Broker/protocol/saml"/>
<SingleLogoutService validateRequestSignature="true" validateResponseSignature="true" signRequest="true" signResponse="true" requestBinding="POST" responseBinding="POST" postBindingUrl="http://localhost:8280/auth/realms/Broker/protocol/saml" redirectBindingUrl=" http://localhost:8280/auth/realms/Broker/protocol/saml"/>
</IDP>
</SP>
</secure-deployment>
代理领域中的身份提供者具有以下配置:
-SSO service URL: http://localhost:8180/auth/realms/Athens/protocol/saml
SAML客户端具有以下配置:
-Client ID: http://localhost:8280/auth/realms/Broker
-Client Protocol: SAML
-Master SAML processing URL: http://localhost:8080/TestClientKeyCloakSAML/saml
如果我们从客户端登录,我们可以通过经纪人并登录 提供者,但是来自提供者的响应到达了经纪人, 返回此错误:
10:22:00,529 WARN [org.keycloak.protocol.saml.SamlService] (default task-20) Unknown saml response.
10:22:00,529 WARN [org.keycloak.protocol.saml.SamlService] (default task-20) UserSession is not tagged as logging out.
10:22:00,529 WARN [org.keycloak.events] (default task-20) type=LOGOUT_ERROR, realmId=Broker, clientId=null, userId=null, ipAddress=127.0.0.1, error=invalid_logout_response
问题在于响应正在到达 SAMLService.BindingProtocol.handleSamlResponse,看来 方法仅处理注销响应。
通过Keycloak代理向Keycloak SAML提供程序认证SAML客户端(在Wildfly 11中使用keycloak SAML适配器)进行身份验证需要什么配置?