Как указать redirectUrl после выхода из системы для фильтра Ambassador OAuth2 с Keycloak?

Я использую фильтр Ambassador OAuth2 для выполнения авторизации OAuth2 против Keycloak. Для выхода я использую выход, инициированный RP, как описано в Документы посла Выход из системы работает нормально. Однако я не мог понять, как предоставить URL-адрес перенаправления, необходимый Keycloak для перенаправления на страницу входа в систему после успешного выхода из системы. В результате пользователь остается на пустой странице выхода из системы keycloak.

Выход из системы, инициированный RP, выглядит следующим образом

 const form = document.createElement('form');
    form.method = 'post';
    form.action = '/.ambassador/oauth2/logout?realm='+realm;
    const xsrfInput = document.createElement('input');
    xsrfInput.type = 'hidden';
    xsrfInput.name = '_xsrf';
    xsrfInput.value = getCookie("ambassador_xsrf."+realm);
    form.appendChild(xsrfInput);
    document.body.appendChild(form);
    form.submit();

Я ожидал, что посол предоставляет способ добавить URL-адрес перенаправления в качестве параметра запроса или чего-то еще, но я не смог найти решения. Есть ли какие-нибудь предложения или обходные пути?


person Christoph Krieger    schedule 30.07.2020    source источник


Ответы (2)


Я нашел это в документации по посланнику, которую можно было упустить из виду, как я делал это несколько раз:

Настройки Ambassador OAuth2

protectedOrigins: (вы определяете их и должны зарегистрировать их у своего поставщика удостоверений). Определяет имена хостов, которые могут соответствующим образом устанавливать файлы cookie для приложения. Используются только схема (https: //) и авторитетная (example.com:1234) части; часть пути URL игнорируется.

Вам нужно будет зарегистрировать каждый источник в protectedOrigins в качестве авторизованной конечной точки обратного вызова у вашего поставщика удостоверений. URL будет иметь вид {{ORIGIN}} /. Ambassador / oauth2 / redirection-endpoint.

Таким образом, похоже, что посол жестко кодирует конечную точку перенаправления (redirect_uri), которую вам нужно добавить к своему клиенту OAuth2 в Keycloak.

person ioneyed    schedule 30.07.2020
comment
Спасибо за вашу помощь, но я не уверен, что это то, что я ищу. При выполнении публикации, как описано выше, Ambassador перенаправляет браузер на URL-адрес выхода из системы keycloak. Посол URL-адреса перенаправляется на следующий вид: http://auth-serve}/auth/realms/{realm-name}/protocol/openid-connect/logout . Но для перенаправления в приложение после выхода из системы keycloak ожидает параметр запроса redirect_uri = encodedRedirectUri. Следовательно, мне нужно, чтобы посол перенаправил на этот URL: http://auth-server/auth/realms/{realm-name}/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri . - person Christoph Krieger; 05.08.2020
comment
Похоже, вы обрабатываете выход из системы следующим образом: getambassador .io / docs / latest / themes / using / filters / oauth2 / - что предполагает, что вы можете просто добавить параметр запроса в URL-адрес области для посла. - person ioneyed; 05.08.2020

Я нашел решение для этого, это не лучшее решение, но вы выйдете из системы с помощью кнопки.

async function logout() {
const data = new URLSearchParams("realm=keycloak-oauth2-filter.ambassador")
data.append('_xsrf', getCookie("ambassador_xsrf.keycloak-oauth2-filter.ambassador"));
fetch('/.ambassador/oauth2/logout', {
  method: 'POST',
  body: data
})
  .then(function (response) {
    if (response.ok) {
      return response.text()
    } else {
      throw "err";
    }
  })
  .then(function (text) {
    console.log(text);
  })
  .catch(function (err) {
    console.log(err);
  });

}

person Anibal Fernandez    schedule 28.11.2020