第三方登录——OAuth2.0协议

想不想在自己的产品中加入微信、QQ、新浪微博等第三方登录的功能?知道这些功能使用的都是什么技术吗?答案就是“开放式授权”,英文简称为“OAuth”。OAuth协议为用户资源的授权提供了一个安全、简易、开放的标准。OAuth协议不会使第三方触及到用户的账户信息,第三方无需使用用户的用户名和密码就可以申请获得该用户资源的授权完成登录。
 
OAuth的工作原理如下:
step1:获取Request Token
step2:获取Access Token
step3:后续API访问
step4:Refresh Token刷新Access Token
 
举个例子:

用户要登录目标网站,使用自己的QQ号进行第三方登录,这个流程可以简化为下图:

 

接下来,详细解释其中关键环节。
 
  • 请求OAuth登录页:
目标网站请求腾讯QQ的登录页时使用的是Request Token URL,也就是未授权的令牌请求服务地址。目标网站使用的是带有特定参数的URL
这个特定参数其实就类似于app_id和app_key,因为有很多网站都使用了QQ第三方登录的功能,这些特定参数就是QQ分配给各个使用方网站的使用授权标识,是QQ验证使用方网站权限的依据。然而,这些参数还不止于此,还有另外一个就是回调地址,也就是说,请求OAuth登录页除了要附带授权标识,还要附带回调地址,以便告诉QQ的OAuth服务器,用户在登录成功以后要跳转到哪个URL。
 
  • 用户使用第三方账号登录并授权
在用户登录成功以后,跳转到目标网站指定的URL(回调地址)。在跳转过程中,URL还会加上一个参数,我们命名为code吧。code这个参数是加密过的字符串。在用户本机请求带有code参数的回调地址时,回调地址对应的服务端会接收code参数。当接收到code参数以后,按理说已经可以确保用户登录成功了。但在这里还有一个安全隐患:万一code被中间人截获,中间人冒充目标网站使用QQ的OAuth服务器提供的各种权限,那就出事了。因此,还需要一个步骤来避免这种情况。我们要保证code参数被合法的目标网站获取到。
 
  • 返回登录结果
从上一个环节中,我们可以知道,回调地址(通常是目标网站)服务器在得到了code参数以后,还不能认为是用户已经登录成功了,只有在QQ的OAuth服务器返回登录结果的时候才能认为用户登录成功。那么,接下来就会拼接一个新的URL用来访问QQ的OAuth服务器,让其返回一个登录结果。这个新的URL其实就是User Request URL(用户已授权的令牌请求服务地址)。新的URL中会包含3个参数:app_id、app_key、code。3个参数一起传送到QQ的OAuth服务器,OAuth服务器就可以确认的确是目标网站本尊,code没有被中间人截获。
另外,还有一点要注意:code的存在时间很短,目标网站服务器必须在很短的时间内完成整个交互过程。为什么要这样设计?如果有中间人截获了code,他就必须在很短的时间内对code进行破解,而且还要去伪造一个URL。然而加密算法可不是闹着玩的,code能让你这么简单就破解了?所以,这个做法进一步确保了这个过程的安全性。code是一个生命周期很短,并且只能使用一次的加密字符串。
 
以上就是第三方登录的基本交互过程,还有一个Access Token(用户通过目标网站访问OAuth接口的令牌)没有提及,为了方便理解,就不加在上述过程了,因为其作用主要在于让已被OAuth服务器授权的目标网站可以使用其它OAuth服务器提供的服务,比如:把自己喜欢的音乐分享到QQ空间。

--------------------- 本文来自 dengwenjieyear 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/dengwenjieyear/article/details/78442957?utm_source=copy

posted @ 2018-09-27 09:58  阿拉神苗  阅读(982)  评论(0编辑  收藏  举报