Auth2.0安全认证规范

一,Auth2.0认证基本流程

#1,跳转到第三方账号登录页,由用户输入用户名+密码进行授权,获取授权码

#2,根据授权码获取访问码access_token和刷新码refresh_token

#3,根据access_token调用开放平台接口获取数据

#4,如果access_token过期失效,可以通过refresh_token获取一个新的access_token

ps:如果不需要用户进行第三方登录授权的,则可以省略步骤1,直接通过用户名+密码获取access_token和refresh_token;步骤1主要是针对类似第三方授权登录的场景,例如:QQ第三方授权登录等;

 

二,基于Auth2.0协议的第三方登录授权认证

    现在很多web网站登录页,都有第三方账号登录。例如:QQ,淘宝(taobao),微信(wechat),百度(baidu),新浪(sina) 等第三方账号授权登录;下面以QQ为例,介绍第三方账号授权登录的实现过程。

#前期准备阶段
  到腾讯开放平台上,注册网站应用及公司信息,绑定公司web站点生产环境域名(示例:www.pandan.xyz)该域名主要作用是当用户授权成功后,判断redirect重定向地址是否合法,防止redirect地址在传输过程中被串改。跳转到其他非法站点(白名单域名)。

#1,用户在网站登录页点击"QQ登录",则跳转到QQ登录授权页

#2,用户输入QQ用户名+密码,进行授权;授权成功后。QQ授权服务器会返回给浏览器一个redirect地址(这个重定向地址是我们传过去的,只不过QQ授权服务器在这个地址后加了一个参数:授权码)

#3,redirect地址是我们定义的接口地址,在接口逻辑中,获取QQ授权服务器返回的授权码,然后根据授权码,在服务端使用httpclient调用接口获取access_token和refresh_token

#4,使用access_token,调用QQ开放平台接口获取用户唯一标识ID和用户基本信息

#5,根据QQ服务器返回的用户唯一标识ID,查找我们系统数据库,该唯一标识是否关联我们应用ID,如果没有则跳转到绑定页面,如果已经绑定过,则根据关联的本应用ID,获取到用户在本应用中的账号和密码,去完成登录操作。

   

    对于移动端的第三方账号登录,开放平台针对不同终端(ios,android)提供了不同的SDK,用于接入第三方账号登录功能。

     腾讯开放平台针对web和app提供了两种接入方式:网站应用和移动应用,但是有一个比较坑爹的地方是

同一个QQ账号通过网站应用和移动应用返回的唯一标识是不一样的。这样就会导致同一个QQ账号在我们应用中绑定了多个账号。

     问题解决方式:

#方式一:移动端和web端都以网站应用接入,当在移动端点击"QQ登录"时,跳到web浏览器(html5页面)进行授权
适用场景:该功能还未上线,并没有脏数据入库。

#方式二:联系腾讯技术支持,将网站应用和移动应用之间关系打通,并选择其中一个为"主",另一个为"从";这样如果通过"从"获取用户唯一标识,返回的都是"主"的用户唯一标识。
适用场景:功能已经发版,已有用户数据入库。
ps:腾讯只支持两个应用之间的打通,不支持多个应用之间的互通,也就是说三个以上应用不能互通,只能大家都以一个为主,进行两两打通(比如A,B,C三个应用,共用一套账户体系,要实现QQ第三方账号登录,解决方案是比如大家都以A为主,A与B打通之后,然后A再与C打通);
    在两个应用打通之前,需要确定哪一个为"主",哪一个为"从",并且要把之前通过"从"绑定的唯一标识导出来,交给腾讯技术支持,他们会返回这部分"从"唯一标志和"主"唯一标志之间的一 一映射关系的。这样我们就可以对程序进行兼容处理;

猜你喜欢

转载自pandan-xyz.iteye.com/blog/2284688