OAuth 2.0授权框架
字数 965 2025-11-14 01:32:54
OAuth 2.0授权框架
-
核心问题:第三方应用访问受限资源
当您使用某个应用时,可能会遇到“通过微信/谷歌账号登录”或“请求访问网盘文件”的场景。此时第三方应用需要获得您的授权来访问受保护的资源,但直接提供密码给第三方存在安全风险。OAuth 2.0通过授权层分离资源所有者(用户)、客户端(第三方应用)和资源服务器(如云存储),实现安全委托访问。 -
核心角色与术语
- 资源所有者:拥有受保护资源权限的用户
- 客户端:请求访问资源的第三方应用
- 授权服务器:验证用户身份并颁发令牌的组件
- 资源服务器:存储受保护资源的服务(如API服务器)
- 授权许可:代表用户授权资格的凭证(如授权码)
- 访问令牌:客户端用于访问资源的数字密钥
-
授权流程详解(授权码模式)
步骤1:客户端将用户重定向至授权服务器,携带以下参数:GET /authorize?response_type=code&client_id=APP_ID&redirect_uri=CALLBACK_URL&scope=read步骤2:用户登录并确认授权后,授权服务器通过302重定向返回授权码至回调地址:
CALLBACK_URL?code=AUTHORIZATION_CODE步骤3:客户端在后端用授权码交换访问令牌:
POST /token Body: grant_type=authorization_code&code=AUTHORIZATION_CODE&client_secret=SECRET步骤4:授权服务器返回访问令牌和刷新令牌:
{ "access_token": "ACCESS_TOKEN", "refresh_token": "REFRESH_TOKEN", "expires_in": 3600 } -
令牌类型与安全机制
- 访问令牌:通常为JWT格式,包含用户权限范围和有效期,通过Bearer Token方式在HTTP Header传输:
Authorization: Bearer ACCESS_TOKEN - 刷新令牌:长期有效的凭证,用于获取新的访问令牌,避免重复授权
- 范围控制:通过scope参数限制权限(如scope=read_only)
- PKCE扩展:针对移动应用的安全增强,通过代码验证码防止授权码拦截攻击
- 访问令牌:通常为JWT格式,包含用户权限范围和有效期,通过Bearer Token方式在HTTP Header传输:
-
其他授权模式适用场景
- 隐式模式:适用于纯前端应用(无后端服务器),直接通过URL片段返回令牌
- 密码模式:仅受信任客户端使用(如官方应用),直接传递用户名密码
- 客户端模式:用于机器对机器认证(如API内部调用)
-
实际应用案例
当使用天气预报应用查询天气时:- 应用请求获取您的位置权限(scope=location)
- 您通过系统授权页面确认(授权服务器)
- 应用获得访问令牌后向位置服务API(资源服务器)请求数据
- 令牌过期时自动通过刷新令牌获取新令牌,无需重新登录
-
安全实践与规范
- 始终使用HTTPS传输令牌
- 设置合理的令牌有效期(访问令牌≤1小时,刷新令牌可更长)
- 采用状态参数防止CSRF攻击
- 遵循OpenID Connect规范时,可同时获取用户身份信息(ID Token)