前言
OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。OAuth在全世界得到广泛应用,目前的版本是2.0版
一.为什么使用OAuth2.0?
在前言我们介绍了OAuth2.0的作用,但是与其他登录方式相比我们为什么要选择OAuth2.0呢?
案例讲解:
在我们平常的生活中很多应用程序中会需要登录,但是在普通的一个App中我们常见的一般是用到账号密码登录,所以在每次进行登录操作时我们都需要进行输入账号密码,这时候肯定会有人说了,我登录一次就可以在我的设备上记住密码了,那么假设更换设备时是不是还是需要输入账号和密码,所以在频繁得使用账号密码登录的时候往往安全性就大大降低了,这时候OAuth2.0的作用就体现出来了,我们使用第三方账号进行登录时,只需要对当前App程序或者网站进行授权即可,并不需要频繁得使用账号密码进行登录,大大降低了我们账号密码泄露的风险,以我们的微信登录为例,微信拥有强大的身份验证机制的同时还可以对网站授权的权限进行管理,这不仅对我们权限的管理提供了更好的体验,也提高了我们用户信息的安全性
小结:OAuth 提供了更安全、便捷且用户友好的身份验证和授权机制,尤其适用于需要集成第三方服务的应用程序
二.OAuth2.0授权机制
1.OAuth2.0角色
-
资源所有者(Resource Owner):通常是最终用户,他拥有资源(例如数据),需要授权第三方应用访问这些资源。
-
客户端(Client):即第三方应用程序,希望访问资源所有者的受保护资源。
-
授权服务器(Authorization Server):负责认证资源所有者并颁发访问令牌(Access Token)给客户端。
-
资源服务器(Resource Server):保护受控制的资源,只对有效的访问令牌持有者提供访问。
2.OAuth2.0授权流程
2.1授权码模式(Authorization Code Grant):
-
客户端重定向:客户端将用户重定向到授权服务器,请求授权,并提供自己的标识。
-
用户授权:用户在授权服务器上登录,并同意授权客户端。
-
授权码颁发:授权服务器生成一个授权码,并将其传递给客户端。
-
令牌请求:客户端使用授权码请求访问令牌(Access Token)。
-
访问令牌颁发:授权服务器验证授权码,如果有效,颁发访问令牌。
-
资源访问:客户端使用访问令牌访问资源服务器上的受保护资源。
令牌的特点:
- 令牌又时效性,一般是短期的,且不能修改,密码一般是长期有效的
- 令牌可以由颁发者撤销,且即时生效,密码一般可以不用修改而长期有效
- 令牌可以设定权限的范围,且使用者无法修改
在使用令牌时需要保证令牌的保密,令牌验证有效即可进入系统,不会再做其他的验证。
2.2 密码授权模式(Resource Owner Password Credentials Grant):
-
用户凭证:用户将用户名和密码直接提供给客户端。
-
令牌请求:客户端使用用户提供的凭证向授权服务器请求访问令牌。
-
访问令牌颁发:授权服务器验证用户凭证,如果有效,颁发访问令牌。
-
资源访问:客户端使用访问令牌访问资源服务器上的受保护资源。
2.3 客户端凭证模式(Client Credentials Grant):
-
客户端身份验证:客户端使用自己的身份凭证向授权服务器请求访问令牌。
-
访问令牌颁发:授权服务器验证客户端身份,如果有效,颁发访问令牌。
-
资源访问:客户端使用访问令牌访问资源服务器上的受保护资源。
2.4 简化(隐式)模式(Implicit Grant)
-
重定向到授权服务器:客户端直接将用户重定向到授权服务器,并请求授权,不同于授权码授权流程,不需要授权码交换步骤。
-
用户授权:用户在授权服务器上登录并同意授权请求。
-
直接颁发令牌:授权服务器直接向客户端返回访问令牌,不再颁发授权码。这个令牌直接由浏览器接收,并在重定向过程中传递给客户端。
-
访问资源:客户端使用获得的访问令牌去访问资源服务器上的受保护资源。