OAuth2基础知识

简介: OAuth2基础知识

什么是OAuth 2

  1. OAuth 2.0是一种授权协议,它的核心是授权许可和令牌机制。
  2. 它通过颁发访问令牌给第三方,允许第三方代表用户访问该用户的数据,而不是直接给第三方用户名和密码。
  3. 它主要用来保护Web API接口,第三方只有得到授权和访问令牌后,才能访问API。
  4. 它实现了第三方软件安全地代表用户访问数据,不会增加安全风险。
  5. 典型的授权流程包括:用户登录、用户授权、颁发授权码、第三方用授权码换取访问令牌、第三方使用访问令牌获取数据。
  6. OAuth 2.0在许多场景中应用,如微信登录其他App、使用微信小程序等。
  7. 授权码许可是OAuth 2.0中最完备、安全的授权方式。
  8. OAuth 2.0核心思想可应用到不同场景中,保证了通信安全的同时提高了用户体验。

对授权码的要求

  1. OAuth2.0 中,访问令牌需要高度保密,不能直接暴露在浏览器中。如果不使用授权码,获取访问令牌时就只能通过后端通信,无法建立用户与客户端的“连接”。
  2. 使用授权码可以实现两次重定向,既保证了安全性,又实现了用户体验。第一次重定向用于获取授权码,第二次重定向用于重新建立用户和客户端的连接。
  3. 授权码作为临时凭证,可以在前端暴露,而访问令牌只能在后端流转。这样既满足了通信安全性,又实现了用户的顺畅体验。
  4. 授权码实现了间接通信获取授权码和直接通信获取访问令牌的结合,完美组织了OAuth2.0的四个角色的交互。
  5. 授权码许可的思想可以移植到其他场景,如微信小程序中也采用了类似流程。
  6. 总体来说,授权码机制使授权码许可类型成为OAuth2.0中流程最完善、安全性最高的授权流程。

工作流程

授权服务的工作流程可以总结如下:

  1. 授权服务负责颁发访问令牌,是OAuth 2.0的核心。
  2. 它的工作可以分为两大部分:颁发授权码和颁发访问令牌。
  3. 颁发授权码需要准备工作,包括验证基本信息、验证权限范围、生成授权页面。
  4. 用户授权后,继续验证权限范围、生成并绑定授权码、重定向回调地址。
  5. 颁发访问令牌需要验证第三方软件信息、验证授权码、生成访问令牌并绑定信息。
  6. 同时生成刷新令牌,用于在访问令牌过期后重新获取访问令牌。
  7. 使用刷新令牌需要验证信息、重新生成访问令牌。
  8. 在整个流程中都需要验证权限范围,确保最小授权原则。
  9. 授权服务承担了复杂性,使第三方软件接入OAuth 2.0更简单。

JWT令牌

关于 JWT 令牌,可以概括以下关键点:

  1. JWT 是一种结构化的令牌格式,包含 HEADER、PAYLOAD、SIGNATURE 三部分。
  2. HEADER 表示头部信息,PAYLOAD 表示数据体,SIGNATURE 是签名。
  3. JWT 可以在令牌中包含用户授权信息,不需要数据库或 RPC 查询。
  4. 使用 JWT 可以实现令牌内检,受保护资源直接解析 JWT 即可。
  5. JWT 的优点在于计算代替存储、强制加密、增强系统可用性。
  6. JWT 的缺点是无法在使用过程中修改令牌状态,需要配套密钥管理。
  7. 令牌有自然过期、使用刷新令牌、被主动撤销三种生命周期。
  8. 对第三方软件来说,令牌仍是不透明的,核心服务需要关注令牌。
  9. JWT 适合需要安全传输信息而不依赖状态的场景。

如何安全、快速接入OAuth 2

关于第三方软件和受保护资源服务接入OAuth 2.0,可以概括以下要点:

  1. 第三方软件需要关注注册信息、引导授权、使用访问令牌、使用刷新令牌。
  2. 引导授权时需要将用户重定向到授权服务进行授权。
  3. 使用访问令牌时,建议采用表单参数的方式提交,而不是URI查询参数或请求头字段。
  4. 使用刷新令牌时需要注意访问令牌的有效期,避免频繁重新授权。
  5. 受保护资源服务需要校验访问令牌并关注权限范围,常见的包括不同的权限对应不同的操作、数据、用户。
  6. 可以使用API网关统一处理权限校验,避免每个资源服务重复这部分逻辑。
  7. 第三方软件关心获取和使用令牌,资源服务关心校验令牌和权限控制。
  8. 两者只需关注自身职责,不必处理OAuth 2.0的全部复杂流程。

OAuth2的授权类型

OAuth 2.0 中定义了4种授权类型:

授权码许可(Authorization Code Grant)

通过授权码临时凭证获取访问令牌,流程最完整、安全性最高。

隐式许可(Implicit Grant)

直接在前端通信中返回访问令牌,无需授权码。适用于纯前端应用。

资源拥有者密码凭证许可(Resource Owner Password Credentials Grant)

使用用户名密码直接获取访问令牌。适用于高度信任的官方软件。

客户端凭证许可(Client Credentials Grant)

客户端直接通过app_id和app_secret获取访问令牌,无需用户参与。适用于访问公共数据。

这4种授权类型的主要区别在于获取访问令牌的方式不同。在选择授权类型时,需要根据应用场景和安全性要求进行权衡,优先考虑安全性较高的授权码许可类型。

关于OAuth2.0的四种授权类型,可以概括以下关键点:

  1. 授权码许可类型是流程最完备、安全性最高的授权方式。
  2. 资源拥有者凭据许可适用于官方软件,使用用户名密码获取令牌。
  3. 客户端凭据许可适用于获取公共数据,使用app_id和app_secret获取令牌。
  4. 隐式许可适用于纯浏览器端应用,直接在前端返回访问令牌。
  5. 在选择授权类型时,优先考虑授权码许可,然后结合实际场景选择最适合的类型。
  6. 获取访问令牌的方式是四种授权类型的最大区别。
  7. 所有类型都旨在解决实际场景下的授权问题,需要根据具体情况选择。
  8. 在非浏览器环境下,可以考虑客户端凭据许可或资源拥有者凭据许可。
  9. 按照安全性优先的原则,选择最适合的授权类型。
目录
相关文章
|
6月前
|
存储 安全 Java
一文带你搞懂OAuth2.0
一文带你搞懂OAuth2.0
137 0
|
6月前
|
安全 Java 网络安全
后端进阶之路——综述Spring Security认证,授权(一)
后端进阶之路——综述Spring Security认证,授权(一)
|
存储 安全 Java
OAuth2实现单点登录SSO完整教程,其实不难!(上)
OAuth2实现单点登录SSO完整教程,其实不难!
3370 1
OAuth2实现单点登录SSO完整教程,其实不难!(上)
|
3月前
|
存储 JSON 安全
从入门到精通:Python中的OAuth与JWT,打造无懈可击的认证体系🔒
【8月更文挑战第4天】构建现代Web和移动应用时,用户认证与授权至关重要。Python集成OAuth和JWT技术,能轻松实现安全认证。本文从OAuth基础入手,介绍如何使用`requests-oauthlib`库简化流程,再到JWT进阶应用,利用`PyJWT`库生成及验证令牌。最后,探讨如何结合两者,创建无缝认证体验。通过代码示例,由浅入深地引导读者掌握构建坚固应用认证体系的方法。
85 2
|
安全 Java 数据安全/隐私保护
马老师手写第二版Spring Security OAuth2.0认证授权教程
先是给大家基本概念,然后是基于Session的认证方式,紧接着会带着大家去快速的上手Spring Security,然后回去给大家详解解释Spring Security应用、然后就是分布式系统认证方案以及OAuth2.0,最后是Spring Security实现分布式系统授权!
|
存储 Web App开发 JSON
[安全 】JWT初学者入门指南
[安全 】JWT初学者入门指南
|
存储 安全 Java
OAuth2.0介绍|学习笔记
快速学习 OAuth2.0介绍
125 0
OAuth2.0介绍|学习笔记
|
存储 安全 Java
OAuth2在项目中使用完成的功能说明|学习笔记
快速学习OAuth2在项目中使用完成的功能说明
101 0
OAuth2在项目中使用完成的功能说明|学习笔记
|
安全 Java 数据安全/隐私保护
OAuth2.0四种模式说明|学习笔记
快速学习 OAuth2.0四种模式说明
335 0
OAuth2.0四种模式说明|学习笔记
|
存储 数据库 数据安全/隐私保护
OAuth2介绍 | 学习笔记
快速学习 OAuth2介绍
OAuth2介绍 | 学习笔记