Spring OAuth2 学习整理

简介: Spring OAuth2 学习整理

Spring OAuth2 学习整理

OAuth2 介绍

OAuth2是目前最流行的授权机制,用来授权第三方应用,获取用户数据。

博客提供的流程图中有一点需要注意的是C步骤是用户参与完成验证,验证之后Client拿到对应的Access Token 再进行后续操作.这时Client可以是第三方服务器或者浏览器js存储. OAuth运行流程

bg2014051203.png

说明

spring官方发布了blog ,最新版的SpringSecurity已经不支持创建一个授权服务器,转而提供一个标准的授权服务....

下面的代码是一个单项目,包含了授权服务,资源服务.使用mybatis-plus自定义了用户信息查询和客户端信息查询.

配置

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
        </dependency>
@Configuration
//资源服务配置
@EnableResourceServer
//认证服务配置
@EnableAuthorizationServer
public class OAuth2Config extends AuthorizationServerConfigurerAdapter {
    @Autowired
    private AuthenticationManager authenticationManager;
    @Autowired
    private UserDetailsService userDetailsService;
    @Autowired
    private SysClientDetailsService sysClientDetailsService;
    /**
     * 定义授权和令牌端点以及令牌服务
     */
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints
                // 请求方式
                .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST)
                // 可重写TokenEnhancer 自定生成令牌规则
                .tokenEnhancer(endpoints.getTokenEnhancer())
                // 用户账号密码认证
                .userDetailsService(userDetailsService)
                // 指定认证管理器
                .authenticationManager(authenticationManager)
                // 是否重复使用 refresh_token
                .reuseRefreshTokens(false);
    }
    @Override
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) {
        //是否允许客户端使用form参数提交,不开启则使用Authorization 要加在请求头中,格式为 Basic 空格 base64(clientId:clientSecret)
        oauthServer.allowFormAuthenticationForClients();
    }
    /**
     * 配置客户端详情
     */
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.withClientDetails(sysClientDetailsService);
    }
}

使用流程

1.获取token

http://localhost:8080/oauth/token?username=admin&password=admin123&code=10&uuid=eb36f9f5946a456b8e24b2491c3db429&client_id=ruoyi&client_secret=123456&grant_type=password&scope=server

2.使用access_token访问/index

http://localhost:8080/index

Authorization:bearer xxxx

其中xxxx为步骤1获取的access_token

3.使用refresh_token获取新的access_token

http://localhost:8080/oauth/token?grant_type=refresh_token&refresh_token=e3b3fc9d-2596-4977-b066-a4b01a2b48ae&client_id=ruoyi&client_secret=123456

例子源码

源码为ruoyi2.0版本抽出部分代码构建,新版本ruoyi已去掉oauth2的认证模式

https://gitee.com/MeiJM/spring-cram/tree/master/oauth2

参考资料

https://www.cnblogs.com/fengzheng/p/11724625.html

https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Migration-Guide

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

http://www.ruanyifeng.com/blog/2019/04/oauth_design.html

https://gitee.com/y_project/RuoYi

目录
相关文章
|
1月前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
54 9
|
20天前
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
24 0
|
2月前
|
前端开发 Java 数据库
SpringBoot学习
【10月更文挑战第7天】Spring学习
38 9
|
2月前
|
XML Java 数据格式
Spring学习
【10月更文挑战第6天】Spring学习
22 1
|
2月前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
97 2
|
2月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
146 1
|
2月前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
31 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
2月前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
32 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
145 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
52 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql