Spring Cloud Security OAuth2的授权码模式登录流程

时间:2024-04-04 21:17:12

一、首先创建一个空的父工程

Spring Cloud Security OAuth2的授权码模式登录流程

 二、授权服务器搭建

1、依赖如下:

Spring Cloud Security OAuth2的授权码模式登录流程

 2、Spring Security的基本配置

Spring Cloud Security OAuth2的授权码模式登录流程

a、将用户存在内存中

b、配置了一个表单登录

3、配置授权服务器

Spring Cloud Security OAuth2的授权码模式登录流程

 将Token存在内存中

Spring Cloud Security OAuth2的授权码模式登录流程

a、@EnableAuthorizationServer注解,表示开启授权服务器的自动化配置

b、Token支持刷新、Token的存储位置、Token的有效期、刷新Token的有效期

c、当Token快要过期的时候,我们需要获取一个新的Token,在获取新的Token的时候,需要有一个凭证信息,这个凭证信息就是

refresh_token,这个refresh_token也是有有效期的。

Spring Cloud Security OAuth2的授权码模式登录流程

a、AuthorizationServerSecurityConfigurer用来配置令牌端点的安全约束、也就是这个端点谁能访问,谁不能访问。

b、checkTokenAccess是Token校验的端点,这里我们设置为可以直接访问(当资源服务器收到Token之后,会访问这个端点,校验Token的合法性) 

c、ClientDetailsServiceConfigurer用来配置客户端的详细信息,授权服务器要做两方面的校验,一是校验客户端,二是校验客户,这里我们将客户端信息存在内存中,这里我们配置了客户端的id、secret、资源id、授权类型、授权范围、重定向uri。

Spring Cloud Security OAuth2的授权码模式登录流程

a、authorizationCodeServices用来配置授权码的存储,这里我们存在内存中。

b、tokenServices用来配置令牌的存储,即access_token的存储位置,这里我们也是存储在内存中。

c、授权码是用来获取令牌的,使用一次就失效,令牌是用来获取资源的。

三、资源服务器搭建

资源服务器大多都是和授权服务器放在一起的,这里我们分开。资源服务器就是用来存放用户的资源,用户从授权服务器上拿到access_token之后,接下来就可以通过access_token来资源服务器请求数据。

1、依赖如下:

Spring Cloud Security OAuth2的授权码模式登录流程

2、配置如下:

Spring Cloud Security OAuth2的授权码模式登录流程

 a、当资源服务器和授权服务器放在一起,就不需要配置RemoteTokenServices了。

 b、RemoteTokenServices中我们配置了access_token的校验地址、client_id、client_secret这三个信息,当用户来资源服务器请求资源时,会携带上一个access_token,通过这里的配置,就能够校验出token是否正确。

3、测试用的接口:

Spring Cloud Security OAuth2的授权码模式登录流程

4、修改资源服务器端口: 

Spring Cloud Security OAuth2的授权码模式登录流程

四、Postman测试

 1、获取授权码code:

http://localhost:8080/oauth/authorize?client_id=cli&response_type=code

respinse_type 表示响应类型,这里是code表示响应一个授权码。

2、授权服务器的默认登录页面:

Spring Cloud Security OAuth2的授权码模式登录流程  

Spring Cloud Security OAuth2的授权码模式登录流程

 询问是否授权cli这个用户去访问被保护的资源,我们选择approve(批准),然后点击下方的Authorize按钮。

 scope 表示授权范围。

 Spring Cloud Security OAuth2的授权码模式登录流程

授权服务器给出的授权码。 

3、根据拿到的code,去请求http://localhost:8080/oauth/token获取Token: 

Spring Cloud Security OAuth2的授权码模式登录流程

 access_token 就是我们请求数据所需要的令牌,

refresh_token 是我们刷新token需要的令牌,

expires_in 表示token有效期还剩多少秒。

4、授权码使用一次就会失效,使用第二次会报如下错误。

Spring Cloud Security OAuth2的授权码模式登录流程

 5、根据我们拿到的access_token,去请求资源服务器,access_token通过请求头传递。

access_token我们可以用一个定时任务去维护,不用每次请求页面都去获取,定期去获取最新的access_token即可。

6、当授权服务器通过后,我们拿着access_token去资源服务器加载数据。

Spring Cloud Security OAuth2的授权码模式登录流程

Spring Cloud Security OAuth2的授权码模式登录流程

 因为张三没有 ls的权限,所有访问被拒绝。