一个Java小白的学习之路 个人博客 youngljx.top
OAuth2的介绍
OAuth2的基本角色:
- 用户(资源所有者)
- 客户端(第三方应用)
- 授权服务器
- 资源服务器
授权流程:
- 用户打开客户端以后,客户端要求用户给予授权
- 用户同意给予客户端授权
- 用户端使用获取的授权向认证服务器申请令牌。
- 认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
- 客户端使用令牌,向资源服务器申请获取资源。
- 资源服务器确认令牌无误,同意向客户端开发资源
OAuth2 协议一共支持 4 种不同的授权模式:
- 授权码模式:常见的第三方平台登录功能基本都是使用这种模式。
- 简化模式:简化模式是不需要客户端服务器参与,直接在浏览器中向授权服务器申请令牌(token),一般如果网站是纯静态页面则可以采用这种方式。
- 密码模式:密码模式是用户把用户名密码直接告诉客户端,客户端使用说这些信息向授权服务器申请令牌(token)。这需要用户对客户端高度信任,例如客户端应用和服务提供商就是同一家公司,我们自己做前后端分离登录就可以采用这种模式。
- 客户端模式:客户端模式是指客户端使用自己的名义而不是用户的名义向服务提供者申请授权,严格来说,客户端模式并不能算作 OAuth 协议要解决的问题的一种解决方案,但是,对于开发者而言,在一些前后端分离应用或者为移动端提供的认证授权服务器上使用这种模式还是非常方便的。
url
- /oauth/authrize 用于授权服务请求
- /oauth/token 用于获取访问令牌
- /oauth/confirm_access 用户发送确认授权到这里
- /oauth/error 用户呈现授权服务器授权出错的请求
本文主要记录比较重要的密码模式和授权码模式
密码模式
添加依赖:
<!--添加redis依赖,redis具有过期等功能,适合令牌的存储-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--security-oauth2依赖-->
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.3.6.RELEASE</version>
</dependency>
配置授权服务器:
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
/**
* @Description: 用来支持password模式
*/
@Autowired
AuthenticationManager authenticationManager