3

我正在使用大使 OAuth2 过滤器对 Keycloak 执行 OAuth2 授权。对于注销,我使用大使文档中描述的 RP 发起 的注销注销工作正常。但是,我无法弄清楚如何提供 Keycloak 在成功注销后重定向到登录页面所需的重定向 url。结果,用户停留在 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 添加为查询参数或其他内容的方法,但我找不到解决方案。有什么建议或解决方法吗?

4

2 回答 2

0

我找到了一个解决方案,这不是最好的解决方案,但您将使用按钮注销。

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);
  });

}

于 2020-11-28T06:22:04.347 回答
0

我在大使文档中发现了这一点,我曾多次这样做过:

大使 OAuth2 设置

protectedOrigins:(您确定这些,并且必须向您的身份提供者注册它们)标识可以为应用程序适当设置 cookie 的主机名。仅使用方案(https://)和权限(example.com:1234)部分;URL 的路径部分被忽略。

您需要将 protectedOrigins 中的每个来源注册为您的身份提供者的授权回调端点。URL 看起来像{{ORIGIN}}/.ambassador/oauth2/redirection-endpoint

所以看起来大使硬编码了您需要在 Keycloak 中添加到 OAuth2 客户端的重定向端点 (redirect_uri)。

于 2020-07-30T13:44:15.507 回答