基于 springboot2.x oauth2.0 第三方授权。跟新中。。。。

最近工作内容设到将我们平台的数据分享给第三方平台。了解到spring基于oauth2.0有这样的组件。在挣扎了一番后简单的应用基本没问题了。记录一下哈哈。

1 什么是 oath2?

基于 springboot2.x oauth2.0 第三方授权。跟新中。。。。_第1张图片

讲的的大体就是在说,是一种新的认证和授权的 协议和标准。

它有几个角色我们必须要知道。

基于 springboot2.x oauth2.0 第三方授权。跟新中。。。。_第2张图片

Resource Owner 资源拥有者 (对我而言是我们系统的用户)

client 客户端 (第三方 )

Authorization Server 认证服务器 (对我而言。我们系统检验第三方有没有资格获取我们系统的数据,颁发令牌给第三方)

ResourceSever 资源服务器 (受保护的资源服务,我们用户信息的模块)

oauth2 有好几种 模式认证,我们采用的是流程比较完善的授权码模式

先贴一下 pom.xml  springboot 1.x 和 2.x 变化还是 很大的 要注意版本匹配。

    
        1.8
        Greenwich.SR1
    

    
        
            org.springframework.cloud
            spring-cloud-starter-oauth2
        
        
            org.springframework.cloud
            spring-cloud-starter-security
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            com.alibaba
            druid
            1.1.6
        
        
            mysql
            mysql-connector-java
            5.1.46
        
        
            org.springframework
            spring-jdbc
            4.2.5.RELEASE
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.1.1
        
        
            org.apache.commons
            commons-lang3
            3.4
        
        
            org.freemarker
            freemarker
            2.3.28
        
        
            org.springframework.boot
            spring-boot-starter-tomcat
            2.1.3.RELEASE
        
        
            com.alibaba
            fastjson
            1.2.54
        
    

还有官方指定的 数据表 每个表用后面介绍

-- used in tests that use HSQL
create table oauth_client_details (
  client_id VARCHAR(128) PRIMARY KEY,
  resource_ids VARCHAR(128),
  client_secret VARCHAR(128),
  scope VARCHAR(128),
  authorized_grant_types VARCHAR(128),
  web_server_redirect_uri VARCHAR(128),
  authorities VARCHAR(128),
  access_token_validity INTEGER,
  refresh_token_validity INTEGER,
  additional_information VARCHAR(4096),
  autoapprove VARCHAR(128)
);

create table oauth_client_token (
  token_id VARCHAR(128),
  token BLOB,
  authentication_id VARCHAR(128) PRIMARY KEY,
  user_name VARCHAR(128),
  client_id VARCHAR(128)
);

create table oauth_access_token (
  token_id VARCHAR(128),
  token BLOB,
  authentication_id VARCHAR(128) PRIMARY KEY,
  user_name VARCHAR(128),
  client_id VARCHAR(128),
  authentication BLOB,
  refresh_token VARCHAR(128)
);

create table oauth_refresh_token (
  token_id VARCHAR(128),
  token BLOB,
  authentication BLOB
);

create table oauth_code (
  code VARCHAR(128), authentication BLOB
);

create table oauth_approvals (
	userId VARCHAR(128),
	clientId VARCHAR(128),
	scope VARCHAR(128),
	status VARCHAR(10),
	expiresAt TIMESTAMP,
	lastModifiedAt TIMESTAMP
);


-- customized oauth_client_details table
create table ClientDetails (
  appId VARCHAR(128) PRIMARY KEY,
  resourceIds VARCHAR(128),
  appSecret VARCHAR(128),
  scope VARCHAR(128),
  grantTypes VARCHAR(128),
  redirectUrl VARCHAR(128),
  authorities VARCHAR(128),
  access_token_validity INTEGER,
  refresh_token_validity INTEGER,
  additionalInformation VARCHAR(4096),
  autoApproveScopes VARCHAR(128)
);

下面我们看看具体的配置

一 数据源。

package com.oath2test.auth2server.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * 配置阿里数据源
 */
@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druid() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
        scannerConfigurer.setBasePackage("com.oath2test.**.mapper");
        return scannerConfigurer;
    }


}

对应的配置文件

spring:
  application:
    name: authServer
  datasource:
    url: jdbc:mysql://XXXXXXX/auth2test?useUnicode=true&serverTimezone=UTC&useSSL=false
    password: xxxxxxx
    username: root
    driver-class-name: com.mysql.jdbc.Driver
    platform: mysql
    type: com.alibaba.druid.pool.DruidDataSource
    # 初始化大小,最小,最大
    initialSize: 1
    minIdle: 3
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 30000
    validationQuery: select 'x'
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    filters: stat,wall,slf4j
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

二   WebSecurityConfigurerAdapter 

oauth2.0 只是个协议标准。 内部实现是由 spring Security 安全框架。我们需要继承 WebSecurityConfigurerAdapter 来配置

Security  的一些组件。

AuthenticationManager : 授权认证管理器
PasswordEncoder:加密解密的组件
UserDetailsService:开放给使用者的 用户 登陆 退出 权限相关的 接口 使用时 要重写相关的 方法 备框架调用
UserDetails: 封装 用户状态的实体

 

 

你可能感兴趣的:(学习笔记)