什么是 OAuth?
OAuth(开放授权)是一种针对访问委派的开放标准授权协议。这是一种安全方法,可使用户授予服务提供商(即网站和应用)访问其信息的权限,而无需向他们提供密码。
OAuth 为客户端提供代表服务器所有者对服务器资源的安全委派访问权限。特定授权流使客户端无需提供密码即可访问受保护的资源。相反,客户端使用由资源所有者批准的访问令牌来授予他们访问该资源的权限。
什么是 OAuth 令牌?
OAuth 令牌授权用户资源访问权限。换言之,它们不会对用户进行身份验证,而是由服务提供商用来代表用户授权访问其他资源。
当用户使用其服务提供商身份请求其他资源权限时,就会发生 OAuth。资源将向服务提供商请求权限,会以请求令牌和密钥的形式提供该权限。接下来,资源会将用户重定向到其服务提供商,以对请求进行身份验证。此时,资源将请求令牌交换为访问令牌和密钥。如果两个令牌共享同一个密钥,则 OAuth 流程已完成,用户已成功将资源的访问权限委派给服务提供商。
OAuth 流程
步骤 1
请求访问
Anne 在 YouTube(资源)上请求将视频直接发布到其 Twitter 简讯(服务提供商)上。随后,YouTube 向 Twitter 请求访问权限。
步骤 2
请求令牌和密钥交换
Twitter 向 YouTube 提供请求令牌和密钥。
步骤 3
身份认证
YouTube 将 Anne 重定向到 Twitter 以登录。 Anne 向 Twitter 提供其登录凭证,并验证来自 YouTube 的请求由用户发起。
步骤 4
访问令牌交换
用户验证请求后,YouTube 会要求 Twitter 将请求令牌和密钥交换为访问令牌。 如果与令牌关联的密钥相匹配,Twitter 将向 YouTube 提供访问令牌并授予对 YouTube 的访问权限。
步骤 5
授予访问权限
Anne 现在可以安全使用 YouTube 将视频直接发布到其 Twitter 简讯中。
上述示例总结了 OAuth 的一般流程。此外,OAuth 还允许更精细的控制和权限,例如用户有权随时撤销令牌,以及为不同的资源定义对服务提供商的不同访问级别。
OAuth 1.0 与 OAuth 2.0
2012 年,OAuth 2.0 作为对 OAuth 1.0 的重大革新而推出。对此版本的 OAuth 所做的更改非常重要,以致于版本 2.0 和 1.0 不兼容。OAuth 2.0 旨在解决 OAuth 授权流中的会话固定安全漏洞。
虽然 OAuth 2.0 已解决此问题,但新版本有意没有定义或不支持加密、签名、客户端验证或通道绑定,而是要求实施者为此目的使用不同的安全协议(如 HTTPS/TLS)。
OAuth 1.0 和 2.0 之间的区别可以总结如下:
OAuth 与 SAML - 两者有何区别?
SAML 是一种 XML 语言变体,描述了允许一台设备代表一台或多台设备执行身份验证和授权的框架。
随着 JSON 等轻量级数据编码选项的出现,OAuth 逐渐被采用以支持移动设备用户。尽管 OAuth 是从替换 SAML 的需求演变而来的较新协议,但这两种协议对于安全单点登录 (SSO) 都至关重要。
换言之,OAuth 不是 SAML 的替代方案,因为这两种协议可以相互补充。例如,在 SSO 环境中,SAML 可能负责身份验证(确认用户真实并且应被授予访问权限),而 OAuth 将负责授权(授予对特定受保护资源的访问权限)。