什么是 OAuth 2.0?
OAuth 2.0 是一种授权框架,允许第三方应用在用户授权的情况下访问用户存储在另一个服务提供者上的资源。它不直接处理身份验证,而是专注于授权。OAuth 2.0 的主要目标是提供一种安全、标准化的方式,让用户能够授权第三方应用访问其资源,而无需共享其用户名和密码。
一、OAuth 2.0 的核心角色
在 OAuth 2.0 协议中,有四个核心角色:
- 用户:也就是资源的主人,比如你在社交平台上发布的照片和动态
- 客户端:想要获取资源的第三方应用,比如你常用的健身 APP
- 资源服务器:存储用户数据的大本营,像微信的服务器
- 授权服务器:专门负责发放访问许可证的 "数字门卫"
二、授权流程:四种不同的信任建立方式
-
授权码模式(Web 应用首选)
这是最严谨的授权方式,就像你通过银行 APP 转账:-
用户登录授权服务器
-
获得临时凭证(授权码)
-
客户端用授权码兑换正式访问令牌
-
最终拿到有效期较短的 "资源通行卡"
-
-
简化模式(前端应用专属)
适用于没有后端的轻量级应用,类似酒店房卡:-
用户直接在页面完成授权
-
浏览器地址栏收到访问令牌
-
注意:这种方式安全性稍弱,令牌容易泄露
-
-
密码模式(高信任场景)
适用于企业内部系统,如同级同事借用文件:- 用户直接提交账号密码
- 客户端用凭证换取访问权限
- 建议仅在绝对信任的场景使用
-
客户端凭证模式(服务间通信)
适用于应用自身资源的访问,类似部门间调阅文件:-
客户端用自身身份验证
-
直接获取受限的访问令牌
-
三、安全保障:数字时代的防护盾
OAuth 2.0 通过多层防护确保安全:
- 访问令牌(Access Token) :用于访问受保护资源的令牌,通常具有较短的有效期。
- 刷新令牌(Refresh Token) :用于获取新的访问令牌,通常具有较长的有效期。
- HTTPS:所有通信都应通过 HTTPS 进行,以防止令牌被窃取。
- 令牌范围(Scope) :限制访问令牌的权限,确保客户端应用只能访问用户授权的资源。
四、实际应用场景
OAuth 2.0 广泛应用于各种场景,包括:
- 社交登录:用户可以使用其社交媒体账户(如 Google、Facebook)登录第三方应用。
- API 访问:第三方应用可以访问用户在其他服务上的数据(如 GitHub API、Google Drive API)。
- 单点登录(SSO) :用户只需登录一次,即可访问多个相互信任的应用系统。
总结
OAuth2.0 的授权简单理解其实就是获取令牌(token)的过程,OAuth 协议定义了四种获得令牌的授权方式(authorization grant ):授权码(authorization-code)、简单式(implicit)、密码式(password)、客户端凭证(client credentials),一般常用的是授权码和密码模式。