我在Keycloak Server 4.2.1中使用saml协议登出时遇到了问题。 Keycloak旁边有一个Wildfly 9服务器。在Wildfly服务器中,部署了几个.war文件。它们是JEE7的JSF应用程序。
我像这样配置了saml适配器(keycloak-saml.xml)。与文档类似(qazxsw poi)
https://www.keycloak.org/docs/latest/securing_apps/index.html#_saml-general-config
当我单击“注销按钮”时,应用程序调用下面的代码,以便Wildfly服务器使会话无效。
<keycloak-saml-adapter>
<SP entityID="amp"
sslPolicy="EXTERNAL"
logoutPage="logout.jsp">
<Keys>
<Key signing="true">
<PrivateKeyPem>
...CLIENT PRIVATE KEY...
</PrivateKeyPem>
<CertificatePem>
...CLIENT CERTIFICATE ...
</CertificatePem>
</Key>
</Keys>
<PrincipalNameMapping policy="FROM_ATTRIBUTE"/>
<IDP entityID="idp"
signatureAlgorithm="RSA_SHA256"
signatureCanonicalizationMethod="http://www.w3.org/2001/10/xml-exc-c14n#">
<SingleSignOnService signRequest="true"
validateResponseSignature="true"
requestBinding="POST"
bindingUrl="http://localhost:8080/auth/realms/My-Realm/protocol/saml"/>
<SingleLogoutService signRequest="true"
signResponse="true"
validateRequestSignature="true"
validateResponseSignature="true"
requestBinding="POST"
responseBinding="POST"
postBindingUrl="http://localhost:8080/auth/realms/My-Realm/protocol/saml"
redirectBindingUrl="http://localhost:8080/auth/realms/My-Realm/protocol/saml"/>
<Keys>
<Key signing="true">
<CertificatePem>
... REALM CERTIFICATE ...
</CertificatePem>
</Key>
</Keys>
</IDP>
</SP>
</keycloak-saml-adapter>
我检查了它和它的工作,应用程序使会话无效。
在那之后,我必须告诉keycloak服务器他也应该使这个会话无效。我必须拨打哪个网址?
((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).logout();
((HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false)).invalidate();
在我迁移到Keycloak Server 4.2.1之前,我运行了旧版本1.8.1。使用1.8.1服务器我调用了URL
“Qazxswpoi”。
但那不再适用了。
我测试了几个URL,但没有一个正在工作。我检查了最新的文件 FacesContext.getCurrentInstance().getExternalContext().redirect(" ???? ");
,参数GLO = true也不起作用。我还尝试在keycloak管理控制台中为客户端配置“注销服务POST绑定URL”和“注销服务重定向绑定URL”。
我是否错过了keycloak的代码或管理控制台中的内容?我是否必须在keycloak 4.2.1中调用特定网址?
如果您需要更多信息,请告诉我。
谢谢你的帮助。
亲切的问候。
Keycloak提供单个SAML端点,即“https:// {host} / auth / realms / {realm} / protocol / saml”,您必须向其发送SAML注销请求。在客户端SAML配置中,您必须设置指向应用程序的SAML端点的“主SAML处理URL”,或者如果您具有用于单一注销的特殊SAML端点,则必须显式配置“注销服务重定向绑定URL”你的申请。