OAuth2协议
什么是OAuth2协议
OAuth2是一个开放的标准,允许第三方用户访问该用户在某一个网站上存储的私密资源。
最常见的使用场景,各种第三方登录,如登录网易云音乐使用QQ登录等等,一般这种都会设计OAuth协议。
无需将用户和密码提供给第三方应用
如上述的登录网易云音乐。第三方就是网易云音乐,登录的还是QQ,不需要向网易云音乐提供个人的用户名密码,经过授权之后QQ会开放给网易云音乐。
这个功能是通过提供Token(令牌)给第三方应用实现的,第三方应用可以在特定的时间内访问特定的资源。
OAuth2的基本角色
- 资源所有者(用户)
- 客户端(网易云音乐)
- 授权服务器 验证用户提供的信息是否正确,并返回令牌给第三方应用
- 资源服务器(QQ)
6个步骤,4个授权模式
Spirng Security 结合 OAuth2
SpringBoot的OAuth2是在Spring Security的基础上完成的。
令牌可以存储在redis服务器上,因为redis存在过期的功能
添加依赖
手动添加oauth2依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.akk</groupId>
<artifactId>oauth2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>oauth2</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin