首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用SAML进行密钥披风注销

用SAML进行密钥披风注销
EN

Stack Overflow用户
提问于 2018-09-20 09:38:33
回答 1查看 12K关注 0票数 3

我在KeycloakServer4.2.1中使用saml协议注销时遇到了问题。在Keycloak旁边有一个Wildfly 9服务器。在Wildfly服务器中,部署了服务器.war文件。它们是带有JEE7的JSF应用程序。

我像这样配置了saml适配器(keycloak-saml.xml)。类似于博士学位(saml-general-config)

代码语言:javascript
运行
复制
<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>

当我单击“注销按钮”时,应用程序调用下面的代码,这样Wildfly服务器就会使会话无效。

代码语言:javascript
运行
复制
((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).logout();
((HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false)).invalidate();

我检查了它和它的工作,应用程序使会话无效。

在此之后,我必须告诉keycloak服务器,他也应该使这个会话无效。我要给哪个URL打电话?

代码语言:javascript
运行
复制
 FacesContext.getCurrentInstance().getExternalContext().redirect(" ???? ");

在迁移到Keycloak 4.2.1之前,我运行的是旧版本的1.8.1。使用1.8.1服务器我调用了URL

"uri=http://localhost:8180/amp“。

但这已经行不通了。

我已经测试过serveral,但它们都没有工作。我检查了最新的documetation apps/index.html#logout-2,参数GLO=true也不起作用。我还试图在keycloak管理控制台中为客户端配置"Logout Service POST绑定URL“和"Logout Service重定向绑定URL”。

我是不是错过了键盘斗篷的代码或管理控制台中的什么东西?我必须在keycloak 4.2.1中调用特定的url吗?

如果你需要更多的信息,告诉我。

谢谢你的帮助。

亲切的问候。

EN

回答 1

Stack Overflow用户

发布于 2018-09-25 08:27:17

Keycloak提供了一个SAML端点,即“https://{host}/auth/realms/{realm}/protocol/saml”,您必须将SAML注销请求发送到该端点。在客户端SAML配置中,您要么必须设置指向应用程序的SAML端点的“主SAML处理URL”,要么必须显式配置"Logout Service重定向绑定URL“,如果您的应用程序中有一个特定的SAML端点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52422022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档