14.2、OAuth2基础
分类: Spring Cloud Security
OAuth2 基础
OAuth2 是微服务安全的重要协议。本节将学习 OAuth2 基础。
本节将学习:OAuth2 授权流程、授权码模式、客户端凭证模式,以及令牌类型。
OAuth2 授权流程
流程说明
OAuth2 授权流程:
- 客户端请求授权
- 资源所有者授权
- 授权服务器颁发授权码
- 客户端用授权码换取令牌
- 客户端使用令牌访问资源
角色说明
OAuth2 角色:
- 资源所有者:拥有资源的用户
- 客户端:请求访问资源的应用
- 授权服务器:颁发令牌的服务器
- 资源服务器:提供资源的服务器
授权码模式
流程说明
授权码模式流程:
- 客户端重定向到授权服务器
- 用户登录并授权
- 授权服务器返回授权码
- 客户端用授权码换取访问令牌
- 客户端使用令牌访问资源
适用场景
适用场景:
- Web 应用
- 移动应用
- 需要用户交互
- 安全性要求高
代码示例
@GetMapping("/oauth2/authorize") public String authorize() { return "redirect:" + authorizationServerUrl + "/oauth2/authorize" + "?client_id=" + clientId + "&response_type=code" + "&redirect_uri=" + redirectUri; }
客户端凭证模式
流程说明
客户端凭证模式流程:
- 客户端直接向授权服务器请求令牌
- 授权服务器验证客户端凭证
- 授权服务器颁发访问令牌
- 客户端使用令牌访问资源
适用场景
适用场景:
- 服务间调用
- 后台任务
- 不需要用户交互
- 机器对机器通信
代码示例
@PostMapping("/oauth2/token") public TokenResponse getToken(@RequestParam String clientId, @RequestParam String clientSecret) { // 验证客户端凭证 // 颁发访问令牌 return tokenResponse; }
令牌类型
访问令牌(Access Token)
访问令牌:
- 用于访问受保护资源
- 有效期较短
- 包含权限信息
- 可以是 JWT 或不透明令牌
刷新令牌(Refresh Token)
刷新令牌:
- 用于刷新访问令牌
- 有效期较长
- 需要安全存储
- 可以撤销
JWT 令牌
JWT 令牌:
- 自包含令牌
- 包含用户信息和权限
- 无需查询数据库
- 可验证签名
不透明令牌
不透明令牌:
- 随机字符串
- 需要查询数据库
- 可以撤销
- 更安全
官方资源
- OAuth2 规范:https://oauth.net/2/
- Spring Security OAuth2:https://spring.io/guides/tutorials/spring-boot-oauth2/
本节小结
在本节中,我们学习了:
第一个是 OAuth2 授权流程。 OAuth2 的基本授权流程。
第二个是授权码模式。 适用于需要用户交互的场景。
第三个是客户端凭证模式。 适用于服务间调用。
第四个是令牌类型。 访问令牌、刷新令牌、JWT 令牌等。
这就是 OAuth2 基础。理解 OAuth2 是使用 Spring Cloud Security 的基础。
在下一节,我们将学习 Spring Authorization Server。