Keycloak 如何在使用KeyClope注销大使OAuth2筛选器后指定重定向URL?
我正在使用大使OAuth2过滤器对KeyClope执行OAuth2授权。 对于注销,我使用RP启动的注销,如中所述 注销工作正常。但是,我不知道如何提供keymape在成功注销后重定向到登录页面所需的重定向url。结果,用户停留在密钥披的空白注销页。 RP发起的注销如下所示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
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中即可