Изменить redirect_uri при выходе со страницы учетной записи Keycloak

#keycloak

#keycloak

Вопрос:

Мы пытаемся перенаправить пользователей на http://destionation.com/home когда они выходят из системы со страницы управления учетной записью Keycloak http://localhost:8080/auth/realms/MY_REALM/account / (скриншот):

Управление учетной записью Keycloak

Однако он всегда перенаправляет на http://localhost:8080/auth/realms/KLARA/account / после выхода из системы. Есть ли какой-либо официальный способ изменить это redirect_uri ?

Спасибо!

Ответ №1:

У нас была та же проблема. У нас была ссылка из приложения Angular на страницу учетной записи Keycloak. После смены пароля пользователь мог нажать выход, но redirect_uri указывал на ту же страницу учетной записи. Следовательно, после входа в систему пользователь снова был перенаправлен на страницу учетной записи и застрял в цикле. Мое решение было следующим.

Отправьте URI перенаправления из Angular или любого приложения:

 {URL to account page of Keycloak}   '?redirectUri='   {path to the Home page my app}
 

Затем в темах Keycloak учетная запись / пароль.ftl добавил следующий javascript сверху:

 <script>
var redirectUri;
window.onload = function() {
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
redirectUri = urlParams.get('redirectUri')
document.getElementById( "backButton" ).setAttribute( "onClick", "javascript:goBack();" );
};

var goBack = function() {
window.location.replace(redirectUri);
}
</script>
 

Наконец-то добавлена метка возврата в message.properties и кнопка «Назад» рядом с сохранением:

 <button id="backButton" type="button" class="${properties.kcButtonClass!}${properties.kcButtonDefaultClass!}${properties.kcButtonLargeClass!}" name="submitAction" value="Cancel">${msg("doBack")}</button>
 

Ответ №2:

logoutUrl создается на основе URL-адреса базового сервера (здесь: http://localhost:8080/auth ) :

 config.setLogoutEndpoint(frontendUriBuilder.clone().path(OIDCLoginProtocolService.class, "logout").build(realm.getName(), OIDCLoginProtocol.LOGIN_PROTOCOL).toString());
 

Вы не можете настроить конкретный URL-адрес для конечной точки выхода из системы в управлении учетными записями.

Но вы можете легко создать пользовательскую тему и переопределить значение logoutUrl : https://www.keycloak.org/docs/latest/server_development/index.html#_themes