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

KeyCloak和Spring Boot:会话创建策略

邹麻雀
2023-03-14

我尝试用Spring Boot amd配置Key斗篷,我想使用自定义Key斗篷登录页面来获取访问令牌。然后我想把这个令牌传递给我的微服务中的restendpoint。我的Spring应用程序正在端口8081上运行。我在KeyClope管理控制台中设置有效重定向为http://localhost:8081/*。现在,在将登录jsessionid添加到url后的重定向过程中(看起来是这样的http://localhost:8081/;jsessionid=session_id),我遇到异常:

org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String ";"

从Spring Security配置中删除后,会话创建策略(SessionCreation策略。STATELESS)它被重定向到有效的url,但KEYCLOAK_IDENTITYKEYCLOAK_SESSION未在浏览器存储中设置。我想为为什么它这样工作,什么是正确的方式来配置它?

Spring Security配置的一部分:

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    super.configure(http);
    http.
        csrf().disable()
        .sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .sessionAuthenticationStrategy(sessionAuthenticationStrategy())
        .and()
        .authorizeRequests()
        .anyRequest()
        .fullyAuthenticated();
  }

共有1个答案

狄信然
2023-03-14

如果您将KeyCloak示例Spring引导应用程序app-auth-springboot和keyCloak服务器一起在localhost上运行-你会发现,事实上,它在与IDM的身份验证阶段使用cookieKEYCLOAK_IDENTITYKEYCLOAK_SESSION。您的应用程序不需要这些cookie,但由于所有内容都在您的localhost上运行,您将在“localhost”域下看到它们。登录后,您可以安全地从存储中删除它们,并注意到您的应用程序运行顺利。

对于实际部署,您的IDM和应用程序将位于不同的域中,您将看不到这些cookie。您的申请不需要它们。实际上,您只需要JSESSIONID。

 类似资料:
  • 当会话仅是一个未来的且还没有被建立的会话时被认为是“新”的。因为 HTTP是一种基于请求-响应的协议,直到客户端“加入”到 HTTP 会话之前它都被认为是新的。当会话跟踪信息返回到服务器指示会话已经建立时客户端加入到会话。直到客户端加入到会话,否则不能假定下一个来自客户端的请求被识别为同一会话。 如果以下之一是 true,会话被认为是“新”的: 客户端还不知道会话 客户端选择不加入会话。 这些条件

  • 我试图使用Spring Cloud的Zuul、Eureka和我自己的服务实现微服务架构。我有多个具有UI和服务的服务,每个服务都可以使用x509安全性对用户进行身份验证。现在我想把祖尔放在那些服务机构的前面。由于Zuul无法将客户端证书转发到后端,我认为下一个最好的方法是在Zuul的前门对用户进行身份验证,然后使用Spring会话在后端服务中复制他们的身份验证状态。我遵循了Dave Syer的教程

  • org.openqa.selenium.SessionNotCreatedException:无法创建新会话。(原始错误:命令失败:C:\Windows\system32\cmd.exe/s/C“C:\Program Files(x86)\Android\Android sdk\platform tools\adb.exe”-s 69c7aa170104安装“C:\Program Files(x8

  • 问题内容: 我正在维护Java Web应用程序。 通过登录代码,它可以通过HttpServletRequest的getSession()方法从HttpServletRequest中获取一个HttpSession。(它在会话中使用一些值进行认证) 但是,我担心会话固定攻击,因此在使用初始会话后,我想开始一个新会话或更改会话ID。这可能吗? 问题答案: Servlet 3.0 API不允许您更改现有会

  • 我找了很多解决办法。谢了。

  • 我不知道这是否是实现我的解决方案的更好方法: 该类是可序列化的,因为我从数据库的Json中获取内容,并将内容映射到对象GetFromJson中(我只需要在数据库中执行一次查询)。因为这个原因,我需要在我所有的应用程序中使用对象,因为这个原因,我认为我需要使用一个单例 有人给我发布了一个库来从数据库中获取JSON。JSON对象解析为,因此我创建了我的类。 现在我有很多rest服务,在我的rest服务