![oauth2](https://img-blog.csdnimg.cn/img_convert/ebe4b4e91cac27cdce52d3912bf1e5dd.png)
oauth2
如果您正在寻找JWT实施,请点击此链接
本指南逐步介绍了使用Spring Boot 2创建集中式身份验证和授权服务器的过程,还将提供演示资源服务器。
如果您不熟悉OAuth2,建议您阅读此书。
先决条件
- JDK 1.8
- 文本编辑器或您喜欢的IDE
- Maven 3.0+
实施概述
对于这个项目,我们将通过Spring Boot使用Spring Security 5 。 如果您熟悉早期版本,那么《 Spring Boot迁移指南》可能会有用。
OAuth2术语
- 资源所有者
- 授权应用程序访问其帐户的用户。
- 资源服务器:
- 在
client
获得access token
之后处理经过身份验证的请求的服务器。
- 在
- 客户
- 代表资源所有者访问受保护资源的应用程序。
- 授权服务器
- 在成功验证
client
和resource owner
并授权请求之后,发出访问令牌的服务器。
- 在成功验证
- 访问令牌
- 用于访问受保护资源的唯一令牌
- 范围
- 许可
- 赠款类型
grant
是一种获取访问令牌的方法。
授权服务器
为了构建我们的Authorization Server
我们将通过Spring Boot 2.0.x使用Spring Security5.x 。
依存关系
您可以转到start.spring.io并生成一个新项目,然后添加以下依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
数据库
出于本指南的考虑,我们将使用H2数据库。在这里,您可以找到Spring Security所需的参考OAuth2 SQL模式。
CREATE TABLE IF NOT EXISTS oauth_client_details (
client_id VARCHAR(256) PRIMARY KEY,
resource_ids VARCHAR(256),
client_secret VARCHAR(256) NOT NULL,
scope VARCHAR(256),
authorized_grant_types VARCHAR(256),
web_server_redirect_uri VARCHAR(256),
authorities VARCHAR(256),
access_token_validity INTEGER,
refresh_token_validity INTEGER,
additional_information VARCHAR(4000),
autoapprove VARCHAR(256)
);
CREATE TABLE IF NOT EXISTS oauth_client_token (
token_id VARCHAR(256),
token BLOB,
authentication_id VARCHAR(256) PRIMARY KEY,
user_name VARCHAR(256),
client_id VARCHAR(256)
);
CREATE TABLE IF NOT EXISTS oauth_access_token (
token_id VARCHAR(256),
token BLOB,
authentication_id VARCHAR(256),
user_name VARCHAR(256),
client_id VARCHAR(256),
authentication BLOB,
refresh_token VARCHAR(256)
);
CREATE TABLE IF NOT EXISTS o