OAuth 是一个关于授权(authorization)的开放网络标准。允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。现在的版本是2.0版。
严格来说,OAuth2不是一个标准协议,而是一个安全的授权框架。它详细描述了系统中不同角色、用户、服务前端应用(比如API),以及客户端(比如网站或移动App)之间怎么实现相互认证。
OAuth(开放授权)是一种用于授权第三方应用程序访问用户资源的协议。它被广泛用于互联网服务和应用程序之间的安全身份验证和授权。OAuth协议允许用户通过向第三方应用程序颁发有限的访问权限令牌,而无需将其凭据直接提供给第三方应用。
OAuth的基本流程通常包括以下步骤:
注册应用程序: 第三方应用程序需要在服务提供商的开发者平台上注册,并获得客户端标识符(Client ID)和客户端密钥(Client Secret)。
获取授权: 用户在使用第三方应用程序时,应用程序将重定向用户到服务提供商的授权页面。用户登录并同意授权第三方应用程序访问其资源。
获取授权码: 在用户同意授权后,服务提供商将重定向用户回到第三方应用程序,并提供一个授权码。
获取访问令牌: 第三方应用程序使用授权码向服务提供商发起请求,以获取访问令牌。为了确保安全性,这一步通常需要包括客户端标识符、客户端密钥和授权码。
访问资源: 第三方应用程序使用获得的访问令牌向服务提供商请求用户资源,如个人资料、照片等。
OAuth协议有多个版本,常见的包括OAuth 1.0、OAuth 2.0和OAuth 2.0的各种授权流程,例如授权码授权、密码授权、隐式授权等。OAuth 2.0是目前最广泛使用的版本,它简化了流程,并提供了更好的可扩展性。
需要注意的是,虽然OAuth提供了一种授权机制,但它并不处理身份验证问题。在实际应用中,通常需要与OAuth结合使用OpenID Connect等身份验证协议,以完整地解决身份验证和授权的问题。
OAuth流程如下图:
优点:
- 快速开发,代码量小,维护工作少。
- 如果API要被不同的App使用,并且每个App使用的方式也不一样,使用OAuth2是个不错的选择。
缺点:
OAuth2是一个安全框架,描述了在各种不同场景下,多个应用之间的授权问题。有海量的资料需要学习,要完全理解需要花费大量时间。OAuth2不是一个严格的标准协议,因此在实施过程中更容易出错。