• Spring Security 自定义授权服务器实践


    授权服务器变迁

    授权服务器(Authorization Server)目前并没有集成在Spring Security项目中,而是作为独立项目存在于Spring生态中,图1为Spring Authorization Server 在Spring 项目列表中的位置。

    Spring Authorization Server 为什么没被集成在Spring Security中呢?

    起因是因为Spring 中的Spring Security OAuth、Spring Cloud Security都对OAuth有自己的实现,Spring团队开始是想把OAuth独立出来放到Spring Security中,但是后面Spring团队意识到OAuth授权服务并不适合包含在Spring Security框架中,于是在2019年11月Spring宣布不在Spring Security中支持授权服务器。

    但是对于Spring Security不再支持授权服务器,社区反应强烈。于是在2020年4月,Spring推出了Spring Authorization Server项目。

    目前项目最新GA版本为0.3 GA,预览版本1.0.0-M1。

    最小化配置

    安装授权服务器

    1、新创建一个Spring Boot项目,命名为 spring-security-authorization-server
    2、引入pom依赖

    1. <pre class="prettyprint hljs xml" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;"><dependency>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-security</artifactId>
    4. </dependency>
    5. <dependency>
    6. <groupId>org.springframework.security</groupId>
    7. <artifactId>spring-security-oauth2-authorization-server</artifactId>
    8. <version>0.3.1</version>
    9. </dependency>
    10. <dependency>
    11. <groupId>org.springframework.boot</groupId>
    12. <artifactId>spring-boot-starter-web</artifactId>
    13. </dependency>

    配置授权服务器

    1. class="prettyprint hljs livescript" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">import com.nimbusds.jose.jwk.JWKSet;
    2. import com.nimbusds.jose.jwk.RSAKey;
    3. import com.nimbusds.jose.jwk.source.ImmutableJWKSet;
    4. import com.nimbusds.jose.jwk.source.JWKSource;
    5. import com.nimbusds.jose.proc.SecurityContext;
    6. import org.springframework.context.annotation.Bean;
    7. import org.springframework.context.annotation.Configuration;
    8. import org.springframework.core.Ordered;
    9. import org.springframework.core.annotation.Order;
    10. import org.springframework.security.config.Customizer;
    11. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    12. import org.springframework.security.config.annotation.web.configurers.oauth2.server.authorization.OAuth2AuthorizationServerConfigurer;
    13. import org.springframework.security.core.userdetails.User;
    14. import org.springframework.security.core.userdetails.UserDetails;
    15. import org.springframework.security.core.userdetails.UserDetailsService;
    16. import org.springframework.security.crypto.factory.PasswordEncoderFactories;
    17. import org.springframework.security.oauth2.core.AuthorizationGrantType;
    18. import org
  • 相关阅读:
    适配器模式
    4795: 【PY】【C1】【分支】寄快递
    免息配资天宇优配|世界杯与A股有何关系?券商这样分析!
    浅谈Array --JavaScript内置对象
    Android Jetpack 全家桶系列(一)起始篇:Jetpack 的前世今生
    服务领域模型
    学信息系统项目管理师第4版系统36_结语
    【观察】联想“以行践言”,赋能专精特新驶入成长“快车道”
    Cookie、Session、Token、JWT详解
    Java foreach 循环陷阱
  • 原文地址:https://blog.csdn.net/Java_ttcd/article/details/126438974