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

带有第三方会话Cookie的Spring Security自定义登录站点

喻元龙
2023-03-14

我正在创建一个Spring Boot网络应用程序,作为我的用户登录网站。在幕后,通过REST API,它使用OpenAM来验证凭证并创建会话令牌。我希望令牌将用于管理这个登录网站和我们为我们的用户提供的所有其他网站的会话(单点登录)。

我希望SpringBoot应用程序是无状态的。这使得部署更加容易。虽然站点应该是无状态的,但显然我们仍然在OpenAM中保持会话状态。

我正在努力解决如何配置Spring Security以允许cookie代表Spring Security识别的有效会话。当我使应用程序无状态时,它会导致CSRF保护的各种问题,因为它认为我们正在对cookie中具有OpenAM会话令牌的每个请求重新进行身份验证,并创建新的CSRF标头(以防止会话固定)。

我正在使用PreAuthenticationToken作为身份验证类型。我应该使用RemberMemberAuthenticationToken吗?是否需要引入新的SessionAuthenticationStrategy?理想情况下,只有实际的登录帖子才会让Spring Security认为创建了一个新会话。对于所有具有会话cookie的后续请求,它应该让它通过身份验证。(我将在每个请求中使用OpenAM验证令牌。)

想法?安德鲁

共有1个答案

胡禄
2023-03-14

我创建了一个混合站点,它利用了ForgeRock会话令牌和默认的Spring Security HttpSession。为了提供CSRF和会话劫持保护,创建一个完全无会话的应用程序非常具有挑战性。

因此,我的应用程序利用Spring会话提供CSRF和会话劫持投影,并充当缓存。Spring会话持续30秒,在此期间,所有请求都使用了存储的主体信息,不需要查询ForgeRock来验证它。30秒后,Spring会话到期并重新验证ForgeRock会话,并从OpenAM获取更新的主体信息。

我在Spring Security应用程序中实现了一些钩子来实现这个功能。我利用了Spring Boot、Spring Security,以及将它们连接在一起的Java配置方式。

  • 我用我自己的OpenAmCookieAuthentication过滤器替换了AbstractPreAuthenticatedProcessingFilter过滤器。在doFilter()方法中,它检查HttpSession的持续时间是否存在。如果超过“x”秒,则会使会话无效。这将迫使未来的过滤器重新验证OpenAM cookie并获取OpenAM主体信息。
  • 我用我自己的过滤器替换了UsernamePasswordAuthenticationFilter过滤器。要明确的是,我没有在这里实现我自己的过滤器,我只是配置了一个UsernamePasswordAuthenticationFilter实例。我设置了自己的自定义成功和失败处理程序
    • 我创建了自己的成功处理程序,它在使用OpenAM成功进行身份验证时设置OpenAM会话cookie。它扩展了SavedRequest estAware AuthenticationDecessHandler
    • 我创建了自己的失败处理程序来处理清除cookie的失败登录。它扩展了ExceptionMappingAuthenticationFailureHandler
      < li >创建实现< code > AuthenticationUserDetailsService的< code>UserDetailsService

    最后,因为我不能让应用程序完全无状态,所以我使用嵌入式Tomcat实例实现了简单的会话复制。这个实现是受这个帖子的启发:在这里输入链接描述

 类似资料:
  • 我的基于节点的Web服务链接到外部第三方网站,该网站需要我们也拥有的用户名/密码(但与我们的Web服务的登录不相同)。为了提供无缝的用户体验,当用户单击到第三方网站的链接时,我希望使用用户名/密码自动登录,并将其直接带到外部页面的仪表板。 至少,我想用这些信息预先填充第三方登录表单,但这篇详细描述类似情况的文章并没有让我感到乐观。 我不相信第三方站点支持OAuth或现有的SSO协议。我不能使用iF

  • null 有人知道解决这个问题的办法吗?提前感谢! 迈克尔

  • 读取用户登陆信息 调用地址 https://secure.bilibili.tv/login 参数 字段 必选 类型 说明 api true string 申请时填入的API地址 appkey true string 申请时系统提供的Key sign true string 校验密钥 md5(“api=“) 回调 编码为UTF-8 返回值字段 字段类型 字段说明 mid int 会员编号 unam

  • 1.如何获取APPID和APPSECRET这两个参数? 1.需登录微信开放平台配置,具体可参考使用手册。 2.申请QQ互联申请链接 2.升级以后,微信浏览底部图标不显示,应该检查哪里? 后台店铺手机端底部导航设置

  • 问题内容: 我正在尝试确定基于ajax的登录表单进行身份验证和设置客户端cookie的最安全方法。 和 http://www.codinghorror.com/blog/archives/001167.html 所以,我想我的核心问题是… 1)使用纯Ajax设置cookie是否安全,如果是,最安全的方法是什么(httpOnly + SSL +加密值等)? 2)纯ajax方法是否涉及设置cookie

  • JustAuth (opens new window)发展到现在,基本上已经涵盖了国内外大多数知名的网站。JustAuth (opens new window)也一直以它的全和简,备受各位朋友的厚爱、支持。 但现在OAuth技术越来越成熟,越来越多的个人站长或者企业都开始搭建自己的OAuth授权平台,那么针对这种情况,JustAuth (opens new window)并不能做到面面俱到,无法去