从初识到精通,带你领略OAuth协议的奥秘,告别SSO的迷茫与困惑
背景介绍
在现代的网站中,我们经常会遇到需要用户登录的情况。然而,直接要求用户注册可能会显得繁琐,导致用户的流失。为了解决这个问题,网站可以采用OAuth授权机制。通过与像GitHub或其他第三方网站的认证授权合作,网站可以获取用户的相关信息,避免了繁琐的注册过程。
在从第三方网站授权获取用户信息后,可能还需要在本网站填写一些必要的信息,例如手机号码、用户名等,以进行绑定操作。相比直接注册,这种方法要简便得多,也更容易被用户接受。在本文中,我们将解释OAuth 2.0授权框架的构成,希望能为大家带来喜悦。
OAuth的角色
在传统的基于客户端-服务器(CS)模式的授权系统中,当我们希望使用第三方系统来访问受限制的资源时,第三方系统需要获得受限资源服务器的用户名和密码才能进行访问。然而,这种方式明显存在安全隐患。那么,在OAuth2中我们是如何处理这个问题的呢?
在OAuth2中,涉及到以下几个重要的角色:
- 资源所有者(Resource Owner):代表资源的拥有者,通常是一个人。资源所有者可以通过提供用户名密码或其他方式进行授权。
- 资源服务器(Resource Server):代表最终存储和提供资源的服务器,例如通过GitHub授权获取到的用户信息。
- 客户端(Client):代表与资源服务器进行交互的应用或服务。客户端充当资源所有者的代理,向授权服务器请求访问资源。
- 授权服务器(Authorization Server):负责进行授权的服务器,生成访问令牌(Access Token)等相关凭证。
OAuth2实现了安全且可控的资源访问流程。资源所有者授权给客户端访问资源,客户端使用授权服务器颁发的访问令牌来请求资源服务器获取目标资源,这一组合使得OAuth2成为了一种广泛应用于网络服务和应用程序之间安全授权的标准协议。
OAuth2授权的流程
OAuth2授权的整个流程如下:
-
客户端(Client)向资源所有者(Resource Owner)发起授权请求。资源所有者输入相应的认证信息,将授权凭证(Authorization Grant)返回给客户端。
-
客户端使用获得的授权凭证向授权服务器(Authorization Server)发起请求,请求获取访问令牌(Access Token)。
-
授权服务器验证客户端的身份和授权凭证,并生成访问令牌。
-
客户端使用访问令牌向资源服务器(Resource Server)发起请求,以获取受限资源。
通过以上流程,客户端通过授权服务器获取到有效的访问令牌,并使用该令牌向资源服务器请求受限资源。
OAuth2.0的访问令牌
让我们了解一下什么是AccessToken和RefreshToken。
Access Token
这是OAuth协议中的核心令牌。当一个应用(例如,一个网站或一个应用)希望访问另一个服务(例如,Google Drive或Facebook)上的用户数据时,它首先需要获得用户的授权。一旦用户授权,服务器会返回一个AccessToken。这个Token就像一把钥匙,允许持有它的应用访问用户的资源。
-
Access Token的表现形式:实际上是一个全局唯一的随机字符串,它代表了得到用户授权的客户端。拥有这个令牌,就意味着该客户端已经得到了用户的授权,可以访问相应的资源。
-
Access Token的包含内容:包含一些关于资源访问者的信息,例如用户身份、权限