资源所有者(Resource Owner)、资源服务器(Resource Server)、客户端(Client) 和 授权服务器(Authorization Server)——是 OAuth 2.0 协议(RFC 6749) 中定义的四大核心角色。它们共同构成了 OAuth 2.0 委托授权模型的基础。
下面逐一详解每个角色的定义、职责、典型示例及相互关系,帮助我建立清晰的系统认知。
能够授予对受保护资源访问权限的实体。
场景 | 资源所有者 |
|---|---|
微信小程序读取我的头像和昵称 | 我(微信用户) |
一个记账 App 访问我的支付宝交易记录 | 我(支付宝用户) |
企业内部系统调用 HR 系统的员工信息 | 员工本人(或管理员代表) |
⚠️ 注意:虽然 RFC 6749 允许资源所有者是“机器”,但实践中几乎总是人类用户。
托管受保护资源的服务器,能够接收并响应携带 Access Token 的请求。
GET /api/user/profile)Authorization: Bearer <access_token>401 Unauthorized 或 403 Forbidden场景 | 资源服务器 |
|---|---|
GitHub API 提供用户仓库列表 | api.github.com |
微信开放平台提供用户基本信息 | api.weixin.qq.com/sns/userinfo |
我公司内部的订单服务 API | order-service.yourcompany.com |
💡 资源服务器必须信任授权服务器,或能独立验证 Token(如通过公钥验签 JWT)。
代表资源所有者发起请求、获取 Access Token 并访问资源服务器的应用程序。
客户端类型 | 示例 |
|---|---|
Web 应用(有后端) | 一个使用“GitHub 登录”的博客网站 |
单页应用(SPA) | React/Vue 前端应用(需配合 PKCE) |
移动 App | 微信、抖音等调用第三方登录 |
后端服务(M2M) | 支付服务调用风控服务的内部 API |
⚠️ 客户端必须提前在授权服务器注册(提供
client_id、client_secret、redirect_uri等)。
负责验证资源所有者身份,并向客户端颁发 Access Token 的服务器。
client_id + client_secret)类型 | 示例 |
|---|---|
公共授权服务器 | Google Identity Platform、Auth0、Okta、微信开放平台 |
自建授权服务器 | 使用 Spring Authorization Server、Keycloak、ORY Hydra 搭建的内部系统 |
🔐 授权服务器绝不应将用户密码透露给客户端——这是 OAuth 2.0 的根本安全原则。

✅ 关键点:
误区 | 正确理解 |
|---|---|
“授权服务器 = 身份认证服务器” | 授权服务器主要做授权;若需返回用户身份信息(如姓名、邮箱),需结合 OpenID Connect(OIDC) |
“资源服务器要验证用户密码” | ❌ 资源服务器只验证 Token,不处理密码 |
“客户端可以随便拿 Token” | ❌ 客户端必须先注册,且需通过授权流程(用户同意或客户端凭证) |
“Access Token 是用户身份证明” | 不完全对:它代表授权凭证,不是身份凭证(除非是 OIDC 的 ID Token) |
角色 | 核心问题 | 关键特征 | 安全要求 |
|---|---|---|---|
资源所有者 | “谁的数据被访问?” | 通常是用户 | 需明确授权(知情同意) |
资源服务器 | “谁能访问我的 API?” | 验证 Token,返回数据 | 必须严格校验 Token 有效性 |
客户端 | “我想代表用户访问数据” | 发起请求,持有 Token | 必须安全存储 Token 和 client_secret |
授权服务器 | “我来发通行证” | 认证用户,签发 Token | 最高安全级别,防钓鱼、CSRF、重放攻击 |
掌握这四大角色,我就真正理解了现代互联网“第三方登录”和“API 授权”背后的通用语言。