1. 从"凭什么让你访问我的数据"说起
第一次接触OAuth 2.0时,我正为一个电商平台开发第三方登录功能。客户要求接入微信登录,但当我看到文档里要求用户授权"获取个人信息"时,突然意识到:这不就是当年让我犹豫是否要输入QQ密码的场景吗?只不过现在变成了"是否允许XX应用获取你的微信头像和昵称"。
这种授权机制背后,是OAuth 2.0解决的核心问题:如何在用户不暴露凭证的前提下,安全地授权第三方应用访问特定资源。想象一下酒店房卡——它能开指定房间门,但无法打开保险箱,且退房即失效。OAuth 2.0的Access Token正是这种"有限权限凭证"的数字形态。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. OAuth 2.0四大核心角色解析
2.1 资源所有者(Resource Owner)
就是用户本人,拥有数据的绝对控制权。在微信登录场景中,你就是决定是否授权应用获取头像的那个决策者。
2.2 客户端(Client)
指请求访问资源的第三方应用。根据安全性可分为:
- 机密客户端:能安全存储凭证的后端应用(如Java服务)
- 公共客户端:无法保密的客户端(如浏览器/移动端)
我曾犯过的错:在Android客户端硬编码Client Secret,这相当于把钥匙挂在门把手上。正确做法是使用PKCE扩展(后文详解)。
2.3 授权服务器(Authorization Server)
负责验证用户身份并颁发Token的核心组件。例如:
- 微信开放平台的
https://open.weixin.qq.com - GitHub的
https://github.com/login/oauth
2.4 资源服务器(Resource Server)
存储用户数据的服务端点。大型平台通常与授权服务器分离,例如:
- 微信用户信息API:
https://api.weixin.qq.com/sns/userinfo - GitHub用户API:
https://api.github.com/user
3. 授权码模式深度剖析
3.1 标准流程拆解
以GitHub登录为例:
- 用户点击"GitHub登录"按钮
- 应用生成随机state参数(防CSRF)并重定向到GitHub授权页:
ba复制
