当前位置: 首页 > 知识库问答 >
问题:

Keycloak infinite SSO/Login循环(登录到另一个应用程序后)

单于亮
2023-03-14

我有一个GWT应用程序,它有一个公共区域和一个私有区域,我想把它连接到Keycloak 3.4

但有一种情况并不奏效。如果登录到同一领域的另一个应用程序,然后使用http://localhost:8080/appname/打开一个新的浏览器选项卡,则应用程序将打开公共区域。这很好。之后,我单击链接到http://localhost:8080/appname/sso/login的应用程序中的login按钮

http://localhost:8280/auth/realms/realmname/protocol/openid-connect/auth?response_type=code&client_id=appname&redirect_uri=http%3a%2f%2flocalhost%3a8080%2fappname%2fsso%2flogin&state=e7546fb4-dd04-4349-8b7d-2d84c6781d97&login=true&scope=openid

http://localhost:8080/appname/sso/login#state=E7546fB4-DD04-4349-8B7D-2D84C6781D97&code=uss.AopenWeowTEB8VPVNJ7C8NDCEE-A9N90WZDOOP1T448.19896787-621D-4A4F-AC99-A2F4FD108DEB.04C20F46-B52C-42D3-8E99-447E1B8E5F4

这种情况发生在本地,因此没有代理。并且它与浏览器无关。在keycloak中,有一个为AppName客户机创建的会话,所以问题似乎出在客户机代码中。

在新选项卡中直接调用url http://localhost:8080/appname/sso/login时,之前没有用http://localhost:8080/appname/打开应用程序,就没有问题了,我直接登录了。

作为Keycloak适配器,我在应用程序中使用了这个库:https://github.com/realityforge/gwt-keycloak

共有1个答案

赵永逸
2023-03-14

它看起来像一个浏览器(前端)应用程序,您正在使用授权代码流(response_code=code)。对于浏览器应用程序来说,这是不常见的,也是不安全的。您应该将库/应用程序配置为使用隐式流(response_code=id_token)。

 类似资料:
  • 我的程序中有两个while循环。第一个是针对游戏菜单的,第二个是针对实际游戏的。如果“Gameover-Event”发生,我想返回菜单。我不知道该怎么做。

  • 问题内容: 对于典型的最典型的面向Internet的网站,当您通过关闭选项卡( 无需注销 )登录并离开该网站(然后 注销 ),然后再次访问时,可能不需要您重新指定凭据或登录,您可以直接登录。 这一切在后端如何发生?如何在我的JSF 2.1应用程序中启用这种机制? 在Tomcat7服务器上使用JSF 2.1 问题答案: 这基本上是通过一个长寿的cookie完成的。JSF API不提供此功能,因为它只

  • 我在汇编语言中遇到了循环问题。 当我们想要使用计数器寄存器在嵌套循环中循环时,我们首先要做的是将计数器寄存器的值移动到外部循环的堆栈中,然后在我们完成内部循环时取回它,这样我们就能够使用一个计数器寄存器在每个循环中循环不同的迭代次数。 但是嵌套循环中的嵌套循环呢? 我想打印一个由字符< code>S组成的金字塔。我得到的是, 我真正想要的是, 这是我的程序代码 为了实现我想要的,我需要在嵌套循环中

  • 问题内容: 我确信你们中有人注意到,如果您有Acrobat Reader(或其他PDF阅读器),并在Firefox中打开一个PDF,您会看到它嵌入在您的标签中。有什么方法可以将应用程序嵌入JFrame中? 问题答案: 这是一个相当棘手的问题。通常,诸如Adobe Reader之类的本机应用程序不提供可以嵌入到swing应用程序中的组件。但是在Windows中,有COM / OLE方法可以将应用程序

  • 问题内容: 循环视图路径[登录]:将再次分派回当前的处理程序URL [/ login]。检查您的ViewResolver设置!(提示:由于默认视图名称的生成,这可能是未指定视图的结果。) 问题答案: 添加此依赖项

  • 我正在开发两个应用程序。让第一个应用程序是APP1,第二个应用程序为APP2。现在在APP1中,我不提供任何用户权限,如INTERNET权限,但它将发送任何http url,如http://www.google.com我的第二个APP2将包含INTERNET等用户权限。Http请求将从APP1发送到APP2,APP2将响应该请求,然后将结果发送回APP1。最后APP1包含一个Web视图以显示结果。