SpringBoot整合spring-security-oauth2完整实现例子

技术栈 : springboot + spring-security + spring-oauth2 + mybatis-plus

完整的项目地址 : https://github.com/EalenXie/spring-oauth2-authenticator

OAuth2.0是当下最主流的授权机制,如若不清楚什么是OAuth2.0,请移步Oauth2详解-介绍(一)OAuth 2.0 的四种方式 - 阮一峰的网络日志等文章进行学习。

此例子基本完整实现了OAuth2.0四种授权模式。

1. 客户端凭证式(此模式不支持刷新令牌)

请求示例 :

POST /oauth/token HTTP/1.1
Host: localhost:8080
Authorization: Basic QUJDOjEyMzQ1Ng==
Content-Type: application/x-www-form-urlencoded
Content-Length: 29 grant_type=client_credentials

此模式获取令牌接口 grant_type固定传值 client_credentials,客户端认证信息通过basic认证方式。

2. 用户密码模式

请求示例 :

POST /oauth/token HTTP/1.1
Host: localhost:8080
Authorization: Basic QUJDOjEyMzQ1Ng==
Content-Type: application/x-www-form-urlencoded
Content-Length: 52 grant_type=password&username=ealenxie&password=admin

此模式获取令牌接口 grant_type固定传值 password并且携带用户名密码进行认证。(本例子中笔者对此模式做了改造,客户端仍然需要进行basic认证,目的是在一个认证授权中心里面,为了确认客户端和用户均有效且能够建立信任关系)

3. 授权码模式

此模式过程相对要复杂一些,首先需要认证过的用户先进行授权,获取到授权码code(通过回调url传递回来)之后,再向认证授权中心通过code去获取令牌。

3.1 用户认证(登录)

请求示例 :

POST /login HTTP/1.1
Host: localhost:8080
Authorization: Basic QUJDOjEyMzQ1Ng==
Content-Type: application/x-www-form-urlencoded
Content-Length: 32 username=ealenxie&password=admin

认证成功后,会在浏览器写入cookie内容。

3.2 获取授权码

请求示例 :

GET /oauth/authorize?client_id=ABC&response_type=code&grant_type=authorization_code HTTP/1.1
Host: localhost:8080
Cookie: JSESSIONID=D329015F6B61C701BD69AE21CA5112C4

浏览器此接口调用成功后,会302到对应的redirect_uri,并且携带上code值。

3.3 授权码模式获取令牌

获取到code之后,再次调用获取令牌接口

POST /oauth/token HTTP/1.1
Host: localhost:8080
Authorization: Basic QUJDOjEyMzQ1Ng==
Content-Type: application/x-www-form-urlencoded
Content-Length: 90 grant_type=authorization_code&redirect_uri=http://localhost:9528/code/redirect&code=3EZOug

4. 简化模式

此模式首先需要认证过的用户(见3.1 用户认证)直接进行授权,浏览器此接口调用授权接口成功后,会直接302到对应的redirect_uri,并且携带上token值,此时token以锚点的形式返回。

本例子中我在后台配置 redirect_uri 假设为 www.baidu.com 如下 :

5. 刷新令牌

本例中,设置的令牌有效期access_token_validity为7199秒,即两个小时。

刷新令牌的有效期refresh_token_validity为2592000秒,即30天。

access_token过期且refresh_token未过期时,可以通过refresh_token进行刷新令牌,获取新的access_tokenrefresh_token

POST /oauth/token HTTP/1.1
Host: localhost:8080
Authorization: Basic QUJDOjEyMzQ1Ng==
Content-Type: application/x-www-form-urlencoded
Cookie: JSESSIONID=BC4B6A26370829BB3CAD6BED398F72C8
Content-Length: 391 grant_type=refresh_token&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9xxxx.....

此模式获取令牌接口 grant_type固定传值 refresh_token

6. 检查令牌是否有效

当需要进行确定令牌是否有效时,可以进行check_token

POST /oauth/check_token?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiY2xvdWQtYXBpLXBsYXRmb3JtIl0sImV4cCI6MTYxMjM3OTkxMSwidXNlcl9uYW1lIjoiZWFsZW54aWUiLCJqdGkiOiJhZWVmMDhkZS02YTExLTQ3NDAtYTQzNS0wNTMyMThkYTMyYzkiLCJjbGllbnRfaWQiOiJBQkMiLCJzY29wZSI6WyJyZWFkIiwid3JpdGUiXX0.NPTkpwwdnaKSiPzUgILnnhjawgAuw-ZZWk_4HbkfYzM HTTP/1.1
Host: localhost:8080
Authorization: Basic QUJDOjEyMzQ1Ng==
Cookie: JSESSIONID=4838A3CFD6327A1644D1DAB0B095CC58

本例运行先决条件

  1. 因为本例子中使用的数据库方式存储令牌,用户等等。需要准备spring_oauth2的相关数据表,执行本项目下的db脚本(里面配置了oauth2的基础表和客户端及用户账号信息)。
  2. 运行项目

SpringBoot整合spring-security-oauth2完整实现例子的更多相关文章

  1. SpringBoot 整合 spring security oauth2 jwt完整示例 附源码

    废话不说直接进入主题(假设您已对spring security.oauth2.jwt技术的了解,不懂的自行搜索了解) 依赖版本 springboot 2.1.5.RELEASE spring-secu ...

  2. SpringBoot整合Spring Security

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 Spring Securi ...

  3. springBoot整合spring security实现权限管理(单体应用版)--筑基初期

    写在前面 在前面的学习当中,我们对spring security有了一个小小的认识,接下来我们整合目前的主流框架springBoot,实现权限的管理. 在这之前,假定你已经了解了基于资源的权限管理模型 ...

  4. springBoot整合spring security+JWT实现单点登录与权限管理--筑基中期

    写在前面 在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与 ...

  5. Spring Cloud实战 | 第九篇:Spring Cloud整合Spring Security OAuth2认证服务器统一认证自定义异常处理

    本文完整代码下载点击 一. 前言 相信了解过我或者看过我之前的系列文章应该多少知道点我写这些文章包括创建 有来商城youlai-mall 这个项目的目的,想给那些真的想提升自己或者迷茫的人(包括自己- ...

  6. SpringBoot整合Spring Security使用Demo

    https://start.spring.io/ 生成SpringBoot项目 pom文件应该是我这样的: <?xml version="1.0" encoding=&quo ...

  7. SpringBoot 整合Spring Security框架

    引入maven依赖 <!-- 放入spring security依赖 --> <dependency> <groupId>org.springframework.b ...

  8. 畅购商城(九):Spring Security Oauth2

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 畅购商城(一):环境搭建 畅购商 ...

  9. 使用Spring MVC测试Spring Security Oauth2 API

    不是因为看到希望了才去坚持,而坚持了才知道没有希望. 前言 在Spring Security源码分析十一:Spring Security OAuth2整合JWT和Spring Boot 2.0 整合 ...

  10. Spring Security Oauth2 单点登录案例实现和执行流程剖析

    Spring Security Oauth2 OAuth是一个关于授权的开放网络标准,在全世界得到的广泛的应用,目前是2.0的版本.OAuth2在“客户端”与“服务提供商”之间,设置了一个授权层(au ...

随机推荐

  1. 7.shell脚本编程

    1.shell 脚本语言的基本用法 1.1shell 脚本创建 1.格式要求:首行shebang机制 #!/bin/bash #!/usr/bin/python #!/usr/bin/perl 2.添 ...

  2. 基于腾讯云存储COS的ClickHouse数据冷热分层方案

    一.ClickHouse简介 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS),支持PB级数据量的交互式分析,ClickHouse最初是为YandexMetrica ...

  3. 一文彻底理解IO多路复用

    在讲解IO多路复用之前,我们需要预习一下文件以及文件描述符. 什么是文件 程序员使用I/O最终都逃不过文件. 因为这篇同属于高性能.高并发系列,讲到高性能.高并发就离不开Linux/Unix,因此这里 ...

  4. 【C++】《C++ Primer 》第十四章

    第十四章 重载运算与类型转换 一.基本概念 重载运算符是具有特殊名字的函数:由关键字operator和其后要定义的运算符号共同组成.也包含返回类型.参数列表以及函数体. 当一个重载的运算符是成员函数时 ...

  5. 彻底搞懂MySQL为什么要使用B+树索引

    目录 MySQL的存储结构 表存储结构 B+树索引结构 B+树页节点结构 为什么要用B+树索引 二叉树 多叉树 B树 B+树 搞懂这个问题之前,我们首先来看一下,MySQL表的存储结构 MySQL的存 ...

  6. Spring Cloud微服务Sentinel+Apollo限流、熔断实战总结

    在Spring Cloud微服务体系中,由于限流熔断组件Hystrix开源版本不在维护,因此国内不少有类似需求的公司已经将眼光转向阿里开源的Sentinel框架.而以下要介绍的正是作者最近两个月的真实 ...

  7. Android根据pdf模板生成pdf文件

    我们需要生成一些固定格式的pdf文件或者一些报表数据,那么我们可以用 iText包去做. 需要包含的jar包:iText-5.0.6.jar    iTextAsian.jar ,怎样jar包导入工程 ...

  8. TSP旅行商问题

    求解的问题,burma.tsp里面的内容 1 16.47 96.10 2 16.47 94.44 3 20.09 92.54 4 22.39 93.37 5 25.23 97.24 6 22.00 9 ...

  9. ASP Net Core – CORS 预检请求

    CORS(跨源资源共享)是一种机制,它允许同一个来源运行的Web应用程序从在另一个来源运行的服务器访问资源.同源策略是一种非常严格的措施,因为它只允许与服务器起源于同一源的应用程序访问其资源.很多时候 ...

  10. Docker数据目录迁移解决方案

    场景 在docker的使用中随着下载镜像越来越多,构建镜像.运行容器越来越多, 数据目录必然会逐渐增大:当所有docker镜像.容器对磁盘的使用达到上限时,就需要对数据目录进行迁移. 如何避免: 1. ...