加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 系统 > 正文

Spring OAuth2 授权服务器配置介绍

发布时间:2022-06-20 16:29:18 所属栏目:系统 来源:互联网
导读:前两篇文章分别体验了Spring Authorization Server的使用和讲解了其各个过滤器的作用。今天来讲讲Spring Authorization Server授权服务器的配置。强烈建议自己手动搭建一次试试,纸上得来终觉浅,深知此事要躬行。提升你的代码量才是提高编程技能的不二法门
  前两篇文章分别体验了Spring Authorization Server的使用和讲解了其各个过滤器的作用。今天来讲讲Spring Authorization Server授权服务器的配置。强烈建议自己手动搭建一次试试,纸上得来终觉浅,深知此事要躬行。提升你的代码量才是提高编程技能的不二法门,这也是本篇教程的意义所在。
 
  配置依赖
  首先要创建一个Spring Boot Servlet Web项目,这个不难就不赘述了。集成Spring Authorization Server需要引入:
 
  复制
  <!--  spring security starter 必须  -->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
   OAuth2.0 Client客户端需要注册到授权服务器并持久化,Spring Authorization Server提供了JDBC实现,参见JdbcRegisteredClientRepository。为了演示方便这里我采用了H2数据库,需要以下依赖:
 
  复制
  <!--  jdbc 必须引入否则自行实现  -->
  <dependency>
      <groupId>org.springframework.boot</groupId>
   生产你可以切换到其它关系型数据库,数据库脚本在Spring Authorization Server入门 一文的DEMO中。
 
  Spring Authorization Server配置
  接下来是Spring Authorization Server的配置。
 
  过滤器链配置
 
  根据上一文对过滤器链的拆解,我们需要在Spring Security的过滤器链中注入一些特定的过滤器。这些过滤器的配置由OAuth2AuthorizationServerConfigurer来完成。以下为默认的配置:
 
  复制
  void defaultOAuth2AuthorizationServerConfigurer(HttpSecurity http) throws Exception {
       OAuth2AuthorizationServerConfigurer<HttpSecurity> authorizationServerConfigurer =
               new OAuth2AuthorizationServerConfigurer<>();
       // TODO 你可以根据需求对authorizationServerConfigurer进行一些个性化配置
       RequestMatcher authorizationServerEndpointsMatcher = authorizationServerConfigurer.getEndpointsMatcher();
   
       // 拦截 授权服务器相关的请求端点
       http.requestMatcher(authorizationServerEndpointsMatcher)
               .authorizeRequests().anyRequest().authenticated().and()
               // 忽略掉相关端点的csrf
               .csrf(csrf -> csrf.ignoringRequestMatchers(authorizationServerEndpointsMatcher))
               // 开启form登录
               .formLogin()
  
 
  客户端配置信息注册
 
  授权服务器要求客户端必须是已经注册的,避免非法的客户端发起授权申请。就像你平常去一些开放平台申请一个ClientID和Secret。下面是定义脚本:
 
  复制
  CREATE TABLE oauth2_registered_client
  (
      id                            varchar(100)                        NOT NULL,
      client_id                     varchar(100)                        NOT NULL,
      client_id_issued_at           timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
      client_secret                 varchar(200)                        NULL,
      client_secret_expires_at      timestamp                           NULL,
      client_name                   varchar(200)                        NOT NULL,
      client_authentication_methods varchar(1000)                       NOT NULL,
      authorization_grant_types     varchar(1000)                       NOT NULL,
      redirect_uris                 varchar(1000)                       NULL,
      scopes                        varchar(1000)                       NOT NULL,
      client_settings               varchar(2000)                       NOT NULL,
      token_settings                varchar(2000)                       NOT NULL,
      PRIMARY KEY (id)
  );
  1.
  2.
  3.
  4.
  5.
  6.
  7.
  8.
  9.
  10.
  11.
  12.
  13.
  14.
  15.
  16.
  对应的Java类为RegisteredClient:
 
  复制
  public class RegisteredClient implements Serializable {
   private static final long serialVersionUID = Version.SERIAL_VERSION_UID;
   private String id;
   private String clientId;
   private Instant clientIdIssuedAt;
   private String clientSecret;
   private Instant clientSecretExpiresAt;
   private String clientName;
   private Set<ClientAuthenticationMethod> clientAuthenticationMethods;
   private Set<AuthorizationGrantType> authorizationGrantTypes;
   private Set<String> redirectUris;
   private Set<String> scopes;
   private ClientSettings clientSettings;
   private TokenSettings tokenSettings;
       
      // 省略
  } 

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读