keycloak中对接oidc协议时设置prompt=login
prompt=login
是 OIDC(OpenID Connect)协议中的一个登录请求参数,它的作用是 强制用户重新认证,即使浏览器或 SSO 中已经存在有效的会话。
具体解释如下:
1️⃣ 基本作用
-
默认情况下,如果用户已经在 Keycloak 或第三方 SSO 上有有效会话:
- 浏览器访问应用时,Keycloak 会自动使用现有 session 登录。
- 用户不会看到登录页面,直接进入应用。
-
当你在登录请求中加上
prompt=login
:- Keycloak 会忽略现有的 session。
- 强制弹出登录页面,让用户重新输入用户名和密码。
- 确保不会自动使用浏览器里的 SSO 会话。
2️⃣ 示例 URL
https://<keycloak-server>/realms/<realm>/protocol/openid-connect/auth?
client_id=<client_id>
&redirect_uri=<redirect_uri>
&response_type=code
&scope=openid
&prompt=login
client_id
:应用注册的客户端 IDredirect_uri
:登录成功后回调地址response_type=code
:使用授权码模式scope=openid
:必需的 OIDC scopeprompt=login
:强制重新认证
3️⃣ 在你的场景中的作用
在你遇到的问题里:
-
用户登出后仍然直接进入系统首页,原因是 浏览器或 SSO session 没有清理。
-
如果登录请求加
prompt=login
:- 即使浏览器中有旧的 session,也会弹出登录页面。
- 避免了必须关闭浏览器才能重新登录的情况。
💡 核心总结:
- 默认行为:已有 session → 自动登录
- 加
prompt=login
:忽略 session → 强制输入凭证