什么是 开放授权?
开放授权是一种开放标准授权协议,允许用户授予第三方应用程序有限访问其资源的权限,而无需共享其凭据。它通过访问令牌实现安全的委托访问。
快速了解
| 创建时间 | 2007 年(OAuth 1.0),2012 年(OAuth 2.0 RFC 6749) |
|---|---|
| 规范文档 | 官方规范 |
工作原理
OAuth 通过在资源所有者批准后向第三方客户端发放访问令牌来工作。最常见的流程(授权码模式)涉及将用户重定向到授权服务器,用户在那里进行身份验证并批准访问。然后服务器返回授权码,该授权码被交换为访问令牌。OAuth 2.0 是当前版本,被 Google、Facebook、GitHub 和其他主要平台广泛用于 API 访问和社交登录。
主要特点
- 基于令牌的授权(不是认证)
- 支持多种授权类型(授权码、客户端凭据等)
- 作用域定义授予的访问级别
- 刷新令牌用于获取新的访问令牌
- 角色分离:资源所有者、客户端、授权服务器、资源服务器
- 安全性要求使用 HTTPS
常见用途
- 社交登录(使用 Google/Facebook/GitHub 登录)
- 第三方 API 访问
- 移动应用认证
- 微服务授权
- 单点登录(SSO)实现
示例
Loading code...常见问题
OAuth 和身份认证有什么区别?
OAuth 是授权协议,而不是认证协议。认证验证你是谁(身份),而授权决定你可以访问什么(权限)。OAuth 允许用户授予第三方应用程序对其资源的有限访问权限,而无需共享密码。对于认证,OpenID Connect (OIDC) 构建在 OAuth 2.0 之上,添加了身份层以提供用户认证。
OAuth 2.0 有哪些不同的授权类型?
OAuth 2.0 定义了几种授权类型:授权码模式(最安全,用于服务器端应用)、带 PKCE 的授权码模式(用于移动/SPA 应用)、客户端凭据模式(用于机器对机器)、隐式模式(已弃用,曾用于浏览器应用)和资源所有者密码模式(遗留,不推荐)。带 PKCE 的授权码流程现在推荐用于大多数应用程序,包括移动和单页应用。
什么是 PKCE,为什么它很重要?
PKCE(Proof Key for Code Exchange,代码交换证明密钥)是一种安全扩展,保护授权码流程免受拦截攻击。它的工作原理是让客户端生成一个随机的代码验证器和其转换后的代码挑战。挑战随授权请求发送,验证器在交换令牌时发送。这确保只有原始客户端才能完成流程,即使授权码被拦截也是如此。
访问令牌和刷新令牌有什么区别?
访问令牌是用于访问受保护资源(API)的短期凭据。它们通常在几分钟到几小时后过期。刷新令牌是用于获取新访问令牌的长期凭据,无需用户交互。这种分离提高了安全性:如果访问令牌被泄露,它只在短时间内有效,而刷新令牌可以更安全地存储,并在需要时撤销。
OAuth 作用域是如何工作的?
作用域定义了应用程序请求的特定权限。当用户授权应用程序时,他们会看到正在请求的作用域(例如,'read:user'、'write:repos')。授权服务器在访问令牌中包含授予的作用域。然后资源服务器检查这些作用域以确定是否应该允许请求。这实现了细粒度的访问控制,并遵循最小权限原则。