spring-security家族各包简要说明

spring-security家族各包简要说明

因为最近发现spring-security相关包较多,便对spring-security进行整理了一下。

spring security

认证的基础底层,本质是过滤器链,oauth2等都是在security基础上扩展的。此模块不展开说明。感兴趣的可以看我论坛另一篇源码分析帖子。

官网文档地址:Spring Security :: Spring Security

spring-security-oauth2

spring提供的基于oauth2协议开发的。底层为spring-security。包含隐式,资源拥有者(密码模式),客户端凭据,授权码模式的功能

并且提供resourceServer等功能。

resourceServer主要为token校验,其余的功能为通过注解配置得接口权限功能。

代码主要是提供各个功能的endpoint,并且可以通过自定义controller去替换这些endpoint.

现官网以及git仓库已移除相关文档和代码

已于2022年五月停止维护。

spring-cloud-security

基于spring-security-oauth2添加自动配置,提供@EnableOAuth2Sso实现了ssoClient功能。最新版本2.2.5-RELEASE

ssoClient 为登录客户端功能。功能与下面说的oauth2-client类似。

于2022-03停止维护支持

官网存在文档和案例,sample链接部分出错。

官当文档地址:Spring Cloud Security

spring-security-oauth2-authorization-server

基于oauth2.1协议开发的全新的认证服务。也是使用的spring security作为底层。

支持客户端凭据,授权码模式以及支持oidc,但是去除了资源拥有者模式和隐式授权

最低java版本:java11

官网文档地址:Spring Authorization Server Reference

spring-security-oauth2-client

springSecurity5开始提供的包,提供对接认证授权中心登陆的功能,包含github登录等对接功能。

与spring-cloud-security提供的功能一致,多了些默认实现。

主要就是配置clientid,secret等客户端信息以及登录页面跳转地址。

提供github等默认实现是通过配置配置得,配置是特定化的。

如:

spring:
  security:
    oauth2:
      client:
        registration:
          github:
            client-id: replace-with-client-id
            client-secret: replace-with-client-secret
            scope: read:user,public_repo

ps:本模块没看原代码,仅限于官网文档,
官网地址:OAuth 2.0 Client :: Spring Security

spring-security-oauth2-resource-server

springSecurity5开始提供的包,提供基于Oauth2的resource-server功能。

resource-server主要是提供accessToken的校验功能,包括jwt或者非暴露性的token,如uuid

通过解析jwt或者远程调用校验端点校验。通过配置来进行控制。

ps:本模块没看原代码,仅限于官网文档。
官网地址:OAuth 2.0 Resource Server :: Spring Security

security-Oauth2 与authorization-server区别

通过运行官方案例以及阅读源码和文档总结

  • authorization-serverspring-security-oauth2多了oidc支持,但是少了资源拥有者授权模式

  • 实现上除了都是基于spring security,其余差别巨大。

    security-oauth2客户端校验通过filter实现,其余通过endpoint。

    authorization-server通过大量的filter去替代endpoint完成功能,命名大多数以endpointFilter结尾。除了客户端校验的Filtersecurity-oauth2相似。

  • 目前authorization-server案例和文档较为简单,自定义bean和替换不如security-oauth2灵活方便。

  • 但是使用authorization-server是spring的趋势,因为官网原spring-security-oauth2文档代码已经没了,也不在支持