Keycloak账户控制台登出时提示‘Invalid Redirect URI’错误排查


问题描述
使用Keycloak镜像版本quay.io/keycloak/keycloak:26.0.8时出现以下异常:
- 通过Angular-Spring+Docker应用登出,重定向功能正常;
- 通过Keycloak账户控制台登出时,提示“Invalid Redirect URI”错误,登出失败。
当前业务客户端配置:
- Valid Redirect URIs:
/realms/mini_apps_mzhehalo/account/*、http://localhost:4200/* - Valid Post Logout Redirect URIs:
http://localhost:4200/
登出请求中post_logout_redirect_uri已设置为http://localhost:4200/,符合业务客户端配置要求,但错误仍存在。预期登出后重定向至http://localhost:4200/,实际触发无效重定向URI错误。
相关日志信息
2025-01-30 16:39:33 2025-01-30 14:39:33,987 WARN
[org.keycloak.events] (executor-thread-108) type="LOGOUT_ERROR",
realmId="38b78ec7-9f35-4f66-831a-b8275ba36b2c",
realmName="mini_apps_mzhehalo", clientId="account-console",
userId="null", ipAddress="172.20.0.1", error="invalid_redirect_uri",
redirect_uri="http://localhost:9090/realms/mini_apps_mzhehalo/account/"
登出请求链接
http://localhost:9090/realms/mini_apps_mzhehalo/protocol/openid-connect/logout?client_id=account-console&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A9090%2Frealms%2Fmini_apps_mzhehalo%2Faccount%2F&id_token_hint=eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhRkx2dzlQaVBJb21WTkRKU0l1VEVJdkEzc0lCXy04NkEtbFd6aThZOGJBIn0.eyJleHAiOjE3MzgyNDg5NTYsImlhdCI6MTczODI0ODY1NiwiYXV0aF90aW1lIjoxNzM4MjQ2ODU4LCJqdGkiOiJkMzYyZTM5YS1mYzhkLTQxODYtYWZhNC01YTYwYjU1MWY2YzUiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjkwOTAvcmVhbG1zL21pbmlfYXBwc19temhlaGFsbyIsImF1ZCI6ImFjY291bnQtY29uc29sZSIsInN1YiI6IjU4ZDA1MjZjLWMzMzAtNDBkNi1hMjEwLThkMDAxYjdmMDc3YSIsInR5cCI6IklEIiwiYXpwIjoiYWNjb3VudC1jb25zb2xlIiwibm9uY2UiOiI2Yjk0YzJiYy0yMDYwLTRhY2ItYWFiZS0wZWU3ZTIzZGVlYzMiLCJzaWQiOiJkZDZjNmY3NS1lMmRiLTQ1OWItYTEyZC1kMWQxMzU5ODIxZGUiLCJhdF9oYXNoIjoiNGVJYmdvenRRbUtKY2RESmdsYmV5QSIsImFjciI6IjAiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsIm5hbWUiOiJNeWtoYWlsbyBaaGVoYWxvIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXpoZWhhbG9AbWFpbC5jb20iLCJnaXZlbl9uYW1lIjoiTXlraGFpbG8iLCJsb2NhbGUiOiJlbiIsImZhbWlseV9uYW1lIjoiWmhlaGFsbyIsImVtYWlsIjoibXpoZWhhbG9AbWFpbC5jb20ifQ.kOz7EVkdSmlH43DwHxB1pT74v_s-RqGw_h7y0u0t3g9Yc-6DMVetcDjbqbW-RISufbUUiBEPjsH_DNvOiNs5lil4uWNzN3XSLEZYwBvwbH2bNcWCd8jopH4S76G-lAHF8HTIraf0ekGnMJr5FiJEwfbj4Tv4QJ49KJIYeR1HobA4fUS4KWbOXlnLQMz3jiVmg2YCVclSMbQJFE-RfSHLQPw2MEjUnJKnBeq7cxTgl0D15WN3ApQNAZ-P6pnNZTmGUsDsEJ1_Wvg1_u0EBc9WJEcaCqS-eJp5gidzHWuy_rjlcDc6GVZJ1L_V3-dhK3i7VJfCTqEzPXlqNMkqE08ckA
问题原因
从日志可见,触发错误的请求client_id是account-console,而非你的业务客户端。当从Keycloak账户控制台登出时,发起请求的是内置的account-console客户端,它的登出重定向URI需要单独配置,业务客户端的配置仅对自身登出请求生效。
解决步骤
- 登录Keycloak管理控制台,进入目标领域
mini_apps_mzhehalo; - 进入Clients菜单,找到内置的
account-console客户端并进入配置页; - 在Settings标签页中,找到Valid Post Logout Redirect URIs配置项;
- 添加
http://localhost:4200/(或根据需求添加通配符http://localhost:4200/*); - 保存配置后,重新测试账户控制台的登出流程。
额外检查:确保account-console的Valid Redirect URIs包含http://localhost:9090/realms/mini_apps_mzhehalo/account/*(日志中显示的错误redirect_uri),避免登出后无法返回账户控制台。
内容的提问来源于stack exchange,提问作者mzhehalo

