Выйти из Keycloak с SAML - PullRequest
       13

Выйти из Keycloak с SAML

0 голосов
/ 20 сентября 2018

У меня проблема с выходом из системы по протоколу saml в Keycloak Server 4.2.1.Рядом с Keycloak есть сервер Wildfly 9.На сервере Wildfly развернуты несколько файлов .war.Это приложения JSF с JEE7.

Я настроил адаптер saml (keycloak-saml.xml) следующим образом.Похоже на документацию (https://www.keycloak.org/docs/latest/securing_apps/index.html#_saml-general-config)

<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 аннулировал сеанс.

((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).logout();
((HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false)).invalidate();

Iпроверил его и он работает, приложение делает недействительным сеанс.

Теперь, после этого, я должен сообщить серверу keycloak, что он должен также аннулировать этот сеанс. Какой URL мне нужно вызвать?

 FacesContext.getCurrentInstance().getExternalContext().redirect(" ???? ");

До перехода на Keycloak Server 4.2.1 у меня работала более старая версия 1.8.1. На сервере 1.8.1 я вызывал URL

"http://localhost:8080/auth/realms/My-Realm/tokens/logout?redirect_uri=http://localhost:8180/amp".

Но это больше не работает.

Я проверил несколько URL-адресов, но ни один из них не работает. Я проверил последнюю документацию https://www.keycloak.org/docs/latest/securing_apps/index.html#logout-2 и параметр GLO = true также не работает.Я также попытался настроить «URL привязки POST службы выхода из системы» и «URL привязки перенаправления службы выхода из системы» для клиента в консоли администрирования keycloak.

Я что-то пропустил в коде или в административной консоли?подошва брелка?Нужно ли мне звонить по определенному адресу в keycloak 4.2.1?

Если вам нужна дополнительная информация, дайте мне знать.

Спасибо за вашу помощь.

С уважением.

1 Ответ

0 голосов
/ 25 сентября 2018

Keycloak предоставляет одну конечную точку SAML, а именно 'https://{host}/auth/realms/{realm}/protocol/saml',, на которую необходимо отправить запрос на выход из SAML.В конфигурации клиента SAML вы должны либо настроить «Основной URL обработки SAML», указывающий на конечную точку SAML вашего приложения, либо явно настроить «URL привязки перенаправления службы выхода из системы», если у вас есть специальная конечная точка SAML для единого выхода из системы вваше заявление.

...