Keycloak 如何在使用KeyClope注销大使OAuth2筛选器后指定重定向URL?

Keycloak 如何在使用KeyClope注销大使OAuth2筛选器后指定重定向URL?,keycloak,ambassador,Keycloak,Ambassador,我正在使用大使OAuth2过滤器对KeyClope执行OAuth2授权。 对于注销,我使用RP启动的注销,如中所述 注销工作正常。但是,我不知道如何提供keymape在成功注销后重定向到登录页面所需的重定向url。结果,用户停留在密钥披的空白注销页。 RP发起的注销如下所示 const form = document.createElement('form'); form.method = 'post'; form.action = '/.ambassador/oauth2/l

我正在使用大使OAuth2过滤器对KeyClope执行OAuth2授权。 对于注销,我使用RP启动的注销,如中所述 注销工作正常。但是,我不知道如何提供keymape在成功注销后重定向到登录页面所需的重定向url。结果,用户停留在密钥披的空白注销页。

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();
我希望Ambassador提供了一种将重定向url添加为查询参数或其他内容的方法,但我找不到解决方案。
有什么建议或解决办法吗?

我在大使的文件中发现了这一点,就像我多次做的那样,可能会被忽略:

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

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


因此,看起来ambassador硬编码了重定向端点(redirect_uri),您需要将其添加到KeyClope中的OAuth2客户端。

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

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

}

谢谢你的帮助,但我不确定这是否是我想要的。执行上述post时,Ambassador会将浏览器重定向到KeyClope的注销URL。大使重定向到的URL如下所示:
http://auth-serve}/auth/realms/{realm name}/protocol/openid connect/logout
。但是为了在注销后重定向到应用程序,keydrope需要查询参数redirect_uri=encodedredirturi。因此,我需要大使重定向到此URL:
http://auth-server/auth/realms/{realm name}/protocol/openid connect/logout?redirect_uri=encodedRedirectUri
。看起来您是这样处理注销的--这建议您只需将查询参数添加到域url中即可