如何通过密钥斗篷强制每个客户端登录(最佳实践?)

时间:2018-10-29 14:58:38

标签: authentication logging single-sign-on keycloak

我们目前正在实施密钥斗篷,但面临一个问题,即我们不确定解决方案的最佳方法。

我们有使用sso的不同Web应用,并且运行良好。我们遇到的问题是,当我们在一个Web应用程序中使用sso登录时,然后在另一个Web应用程序中执行相同的操作。

最初,这第二个网络应用程序不知道哪个用户来了(并且无需登录即可使用它)。单击“登录”时,它会自动登录用户(通过重定向到密钥库并自动将已登录的用户登录到另一个Web应用程序中)。这第二次记录对用户“透明”发生,因为重定向到密钥斗篷的速度非常快,并且不引人注意。这种行为不是很用户友好。

问题是:考虑到第二个Web应用程序无法预先知道哪个用户正在访问该网站(除非主动重定向到keycloak),是否可以强制总是用户登录特定的keycloak客户端?我的意思是,即使keycloak已经从其他keycloak客户端已经知道了用户/密码,也实际上要向访问者询问用户/密码。

谢谢!

2 个答案:

答案 0 :(得分:1)

在keycloak的邮件列表中,他们为我提供了一个很好的解决方案,但对于版本4:

  1. 在管理控制台中,转到“身份验证”
  2. 复制浏览器流程
  3. 在此新流程中,禁用或删除Cookie
  4. 转到“客户端”->(您的客户端)->“身份验证流替代”,将“浏览器流”更改为新流,然后单击“保存”。“

答案 1 :(得分:0)

使用注销端点作为应用程序中的默认登录按钮操作,并重定向uri参数用于登录页面,在该页面中您使用特定的客户端(当然,您需要正确的URI编码):

https://auth-server/auth/realms/{realm-name}/protocol/openid-connect/logout?redirect_uri=https://auth-server/auth/realms/{realm-name}/protocol/openid-connect/auth?client_id=client_id&redirect_uri=.....&other_params....

=>用户将被注销,然后将其重定向到登录页面