spring security oath
Spring Boot Security Oauth2之客户端模式及密码模式实现
示例主要内容
- 1.多认证模式(密码模式、客户端模式)
- 2.token存到redis支持
- 3.资源保护
- 4.密码模式用户及权限存到数据库
- 5.使用说明
介绍
oauth2 client credentials 客户端模式获取access_token流程
客户端模式(Client Credentials Grant)指客户端以自己的名义,而不是以用户的名义,向"服务提供商"进行认证。严格地说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题。
-
(A)客户端向认证服务器进行身份认证,并要求一个访问令牌。客户端发出的HTTP请求,包含以下参数:
granttype:表示授权类型,此处的值固定为"clientcredentials",必选项。
scope:表示权限范围,可选项。 -
(B)认证服务器确认无误后,向客户端提供访问令牌。
oauth2 password 密码模式获取access_token流程
密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。
在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分,或者由一个著名公司出品。而认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。
-
(A)用户向客户端提供用户名和密码。
-
(B)客户端将用户名和密码发给认证服务器,向后者请求令牌。 客户端发出的HTTP请求,包含以下参数:
grant_type:表示授权类型,此处的值固定为"password",必选项。
username:表示用户名,必选项。
password:表示用户的密码,必选项。
scope:表示权限范围,可选项。 -
(C)认证服务器确认无误后,向客户端提供访问令牌。
Oauth2提供的默认端点(endpoints)
- /oauth/authorize:授权端点
- /oauth/token:令牌端点
- /oauth/confirm_access:用户确认授权提交端点
- /oauth/error:授权服务错误信息端点
- /oauth/check_token:用于资源服务访问的令牌解析端点
- /oauth/token_key:提供公有密匙的端点,如果使用JWT令牌的话
示例使用介绍
1.端模式获取access_token
返回结果
2.密码模式获取access_token
返回结果
3.刷新access_token
返回结果
4.访问受保护的资源
http://localhost:8080/order/1?access_token=b3d2c131-1225-45b4-9ff5-51ec17511cee
正确返回数据
spring security oauth2代码过程
security oauth2 整合的3个核心配置类
- 1.资源服务配置 ResourceServerConfiguration
- 2.授权认证服务配置 AuthorizationServerConfiguration
- 3.security 配置 SecurityConfiguration
1.pom.xml添加maven依赖
主要使用了:security、oauth2、redis、mysql、mybatis-plus等组件
2.认证授权配置AuthorizationServerConfigurerAdapter.java
3.资源配置ResourceServerConfig.java
4.密码模式的用户及权限存到了数据库,UserDetailsServiceImpl.java
5.WebSecurityConfig配置
6.application.yml配置
7.inital.sql数据库初始化脚本
经过以上七个步骤,我们快速实现了Oauth2的密码模式和客户模式功能。