Spring security 将Spring Security OAuth与其他身份验证/授权功能相结合

Spring security 将Spring Security OAuth与其他身份验证/授权功能相结合,spring-security,spring-boot,spring-security-oauth2,spring-session,Spring Security,Spring Boot,Spring Security Oauth2,Spring Session,我们的目标是设计一种安全策略,以保护能够处理多种身份验证和授权模式/实现的API资源 我们旅程的起点是Dave Syer的“”教程,顺便说一句,这是一个很好的资源,可以用来评估使用Spring Security的现代web开发中的不同身份验证和授权策略 对于我们的用例,我们决定需要结合所描述的两种模式,即API网关和OAuth SSO。这样做的原因是我们有两种类型的安全消费者: 外部客户端,由第三方开发并在我们无法控制的环境中运行。这种类型的客户机是该模式的完美候选者 在我们的环境中运行的内部客

我们的目标是设计一种安全策略,以保护能够处理多种身份验证和授权模式/实现的API资源

我们旅程的起点是Dave Syer的“”教程,顺便说一句,这是一个很好的资源,可以用来评估使用Spring Security的现代web开发中的不同身份验证和授权策略

对于我们的用例,我们决定需要结合所描述的两种模式,即API网关和OAuth SSO。这样做的原因是我们有两种类型的安全消费者:

  • 外部客户端,由第三方开发并在我们无法控制的环境中运行。这种类型的客户机是该模式的完美候选者
  • 在我们的环境中运行的内部客户端,基本上是访问受保护资源(API)的servlet应用程序。在本例中,我们决定使用,它在后台使用Spring会话,本质上意味着用户http会话在多个servlet容器之间共享,顺便说一句,与其他集群实现相比,这是一种为表带来很多优势的技术。选择这种模式的原因是,通过这种方式,我们可以删除很多OAuth协议所需的聊天,而这些聊天实际上并不需要
  • 随着POC开发的展开,我们首先注意到这两种策略都按照预期独立工作,只需使用Spring Boot的自动配置功能拉入的默认配置:
    @EnableResourceServer
    @enableRedistpSession

    研究的下一步是在同一个应用中结合这两种方法。我们很快发现,这从一开始就不起作用,因为每一个都将创建一个单独的
    SecurityFilterChain
    ,并且在发出请求时只选择一个,这使得该链对这两种类型的消费者都是独占的

    现在,我们正在拉Spring Studio的过滤器到Spring OAuths中,这样,我们将得到一个单一的<代码> SuffigyFieldStudio,将包含两种策略。

    我们知道RESTAPI应该是无状态的,但我们认为,对于内部客户机来说,这是一个很好的折衷方案,其中会话被推送到后端API,否则,对于外部客户机,API将保持完全无状态

    我们写这篇文章的原因是想了解社区对这件事的想法,以及这种实施的陷阱是什么。随着研究的继续,我们将更新这篇文章,所以请分享你的想法