OAuth

OAuth 代表Open Authorization,是授权的开放标准。它使用访问令牌而不是用户凭据来授权设备、API、服务器和应用程序,这被称为“安全委托访问”。

在最简单的形式中,OAuth 将身份验证委托给 Facebook、Amazon、Twitter 等服务,并授权第三方应用程序访问用户帐户,而无需输入其登录名和密码。

它主要用于 REST/API,并且只提供有限范围的用户数据。

OAuth 有两个版本:OAuth 1.0aOAuth 2.0。这些规范彼此完全不同,不能一起使用:它们之间没有向后兼容性。如今,OAuth 2.0 是使用最广泛的 OAuth 形式。

详细

OAuth 是 REST/API 的委托授权框架。它使应用程序能够在不泄露用户密码的情况下获得对用户数据的有限访问(范围)。它将身份验证与授权分离,并支持解决不同设备功能的多个用例。它支持服务器到服务器应用程序、基于浏览器的应用程序、移动/本机应用程序和控制台/电视。

您可以将其视为酒店钥匙卡,但用于应用程序。如果您有酒店钥匙卡,则可以进入您的房间。您如何获得酒店钥匙卡?您必须在前台进行身份验证才能获得它。认证并获得钥匙卡后,您可以访问整个酒店的资源。

简单来说,OAuth 是:

  1. 应用请求用户授权
  2. 用户授权App并提交证明
  3. 应用程序向服务器提供授权证明以获取令牌
  4. 令牌仅限于访问用户为特定应用程序授权的内容

OAuth参与者

OAuth 流程中的参与者如下:

  • 资源所有者:拥有资源服务器中的数据。例如,我是我的 Facebook 个人资料的资源所有者。
  • 资源服务器:存储应用程序想要访问的数据的 API
  • 客户端:想要访问您的数据的应用程序
  • Authorization Server : OAuth的主要引擎

oauth-actors-cd8b4861e839037400d8521e97c5d8cf0cb029add65d1036488991c7e85dcb72.png

  • 访问令牌是客户端用来访问资源服务器 (API) 的令牌。他们注定是短暂的。以小时和分钟来考虑它们,而不是几天和一个月。您不需要机密客户端来获取访问令牌。您可以通过公共客户端获取访问令牌。它们旨在针对互联网规模问题进行优化。因为这些令牌的寿命很短并且可以横向扩展,所以它们无法撤销,您只需等待它们超时即可。

    另一个令牌是刷新令牌。这要长得多;天,月,年。这可用于获取新令牌。要获得刷新令牌,应用程序通常需要经过身份验证的机密客户端。

    刷新令牌可以被撤销。在仪表板中撤销应用程序的访问权限时,您正在终止其刷新令牌。这使您能够强制客户端轮换机密。您正在做的是使用刷新令牌获取新的访问令牌,并且访问令牌通过网络访问所有 API 资源。每次刷新访问令牌时,您都会获得一个新的加密签名令牌。密钥轮换内置于系统中。

    OAuth 规范没有定义令牌是什么。它可以是您想要的任何格式。不过通常情况下,您希望这些令牌是 JSON Web 令牌(标准)。简而言之,JWT(发音为“jot”)是一种安全可靠的令牌认证标准。JWT 允许您使用签名对信息(称为声明)进行数字签名,并可以在以后使用秘密签名密钥进行验证。要了解有关 JWT 的更多信息,请参阅A Beginner's Guide to JWTs in Java

    令牌是从授权服务器上的端点检索的。两个主要端点是授权端点和令牌端点。它们针对不同的用例分开。授权端点是您从用户那里获得同意和授权的地方。这将返回一个授权授予,表明用户已同意它。然后将授权传递给令牌端点。令牌端点处理授权并说“很好,这是您的刷新令牌和访问令牌”。

Basic Auth

给定名称“基本身份验证”,您不应将基本身份验证与标准用户名和密码身份验证混淆。基本身份验证是 HTTP 规范的一部分,详细信息可以在 RFC7617中找到。

因为它是 HTTP 规范的一部分,所以所有浏览器都原生支持“HTTP 基本身份验证”。

Token Auth

基于令牌的身份验证是一种允许用户验证其身份并作为回报接收唯一访问令牌的协议。在令牌的生命周期内,用户随后可以访问已为其颁发令牌的网站或应用程序,而不是每次返回同一网页、应用程序或任何受同一令牌保护的资源时都必须重新输入凭据.

授权令牌就像盖章票一样工作。只要令牌保持有效,用户就保留访问权限。一旦用户注销或退出应用程序,令牌就会失效。

基于令牌的身份验证不同于传统的基于密码或基于服务器的身份验证技术。令牌提供第二层安全性,管理员可以详细控制每个操作和交易。

JWT

JWT 代表 JSON Web Token 是一种基于令牌的加密开放标准/方法,用于将信息作为 JSON 对象安全地传输。客户端和服务器使用 JWT 安全地共享信息,JWT 包含编码的 JSON 对象和声明。JWT 令牌设计紧凑,可在 URL 中安全使用,并且是 SSO 上下文的理想选择。

其它

Cookie Based

Cookie 是用于识别用户及其偏好的数据片段。每次请求页面时,浏览器都会将 cookie 返回给服务器。HTTP cookie 等特定 cookie 用于执行基于 cookie 的身份验证,以维护每个用户的会话。

OpenID

OpenID 是一种利用 OAuth 2.0 的授权和身份验证机制的协议,现在已被 Internet 上的许多身份提供者广泛采用。它解决了需要在许多不同的网络服务(例如在线商店、讨论论坛等)之间共享用户个人信息的问题。

资料附录

  1. https://developer.okta.com/blog/2017/06/21/what-the-heck-is-oauth
  2. JSON Web Token 简介
  3. 基于 cookie 的身份验证如何工作?
  4. 什么是 OpenID
  5. OAuth 与 OpenID