目前第三方登陆的应用非常普遍,就比如我们在登陆京东的时候我们并没有注册它的账号,但是我们有QQ账号,有支付宝账号,那么我们也能登陆上去,这就是第三方登录的作用所在。下面我们就说一下这个第三方登录的具体实现流程。
第三方登陆与常规登陆最大的一个不同点就在于第三方登陆的时候,用户的数据并不是在你的数据库中存放的,所以想要让别人登陆你就必须获取到用户的信息,所以通过用户使用的第三方平台借口去调用他们的一些数据就是最基础的了。那么我们怎么才能去获取这个接口呢?
(以下以京东使用QQ登陆为例,假设我们在为某个模仿京东的电商项目做开发)
我在开发我们的项目的时候有一部分就是负责的第三方登录,因为当时刚起步,所以用户受众比较小,所以当时项目经理就要求我们做上第三方的登陆,以为第三方如果涉及到QQ微信那些第三方的话,因为他们的用户群体很大,所以用户的留存度会有所提升,那个时候我第一个就想到了去接入QQ的第三方接口,这个第三方登陆呢,是要遵循一个Oauth2.0.这样一个国际化的标准协议的,协议也就是等于说是保密通信协议,要求公司间不泄露密码的前提下在我这儿完成登陆,然后我去联系了QQ的第三方接入平台的客服,客服给了他们的接口服务平台的地址后我在他们的平台接口上注册了一个我们项目的账号,拿到了一个唯一id跟secret安全码,id其实这个就是给我们那个项目一个唯一标识,让他们知道我们到时候接入他们的系统的时候访问身份是谁,注册的时候还让填了一个回调地址,这个就是数据返回的时候调用的我们项目里面的controller的登陆方法。
然后就是我们在sso登陆界面加上QQ的账号登陆图标,让用户点击的时候就跳转到QQ的登陆界面,就像QQ那个界面我觉得您估计也用过,登陆完成后,QQ那边就给我们这里的发回一个随机的code码,类似UUID那样的,这个UUID就是发送给我们那时候shezhi的回调函数的路径,这就相当于它告诉我这个用户已经成功在我们这里的登陆了,让我们放行,我们拿到了这个code码之后也就只是知道该用户在你那里登陆成功了。
可是我什么其他信息dou没有,最起码我们需要知道用户的基本信息,所以我们就又得向QQ那边发起了一次请求,这次请求主要就是要获取用户的token基本信息的,这次请求是紧跟在QQ那边发回code之后发出的,用户也看不到,我们就用了httpclient来模拟http请求(前面介绍过),带上code还有原先注册第三方接入账号时候的填写的ApiKey和AccessKey(接入密匙,数据获取密匙),发送给他们后他们会返回一个token,这个token里面就包含了用户的基本信息,QQ还好,基本信息还算齐全,有的第三方就有点坑了,就像支付宝这样安全级别比较高的,他们给的用户信息真是无力吐槽,就一个用户名,头像跟性别,所以我们再接到这个token后就需要去QQ的后台去调他们的后台数据,看他们是不是跟我们的项目进行过绑定。
因为涉及到了跨平台,所以我们就用了webService请求,第三方会返回给我们一个xml信息,我们根据这个xml信息去看用户是否在他们那边有绑定信息,如果有的话我们就直接去我们的数据库去查询出添加的用户信息。保存信息到session,跳转首页-完成登陆。
要是用户以前没有登陆过我们就会跳转到用户绑定界面,让用户完善邮箱,电话等信息,然后我们把他们填写的数据和第三方的数据都保存到我们的数据库中,然后保存信息到session-跳转首页-登陆完成。
这里面用的webservice是什么?简单来说就是个http协议。内容规定使用的xml格式进行内容和数据封装使用的http消息头来说明http的内容格式,这个就是soap协议!
Webservice服务器端,也就是QQ那边他是注册到了UDDI服务器来暴露他的WSDL文件,这个文件就是相当于一个xml格式的公开接口,告诉你我有什么服务,我会返回给你什么数据,我们就是通过这个接口来获取的数据的~;
既然是服务器第三方访问,所以这种技术在本地或者局域网中获取数据就没什么用了;
第三方登陆与常规登陆最大的一个不同点就在于第三方登陆的时候,用户的数据并不是在你的数据库中存放的,所以想要让别人登陆你就必须获取到用户的信息,所以通过用户使用的第三方平台借口去调用他们的一些数据就是最基础的了。那么我们怎么才能去获取这个接口呢?
(以下以京东使用QQ登陆为例,假设我们在为某个模仿京东的电商项目做开发)
我在开发我们的项目的时候有一部分就是负责的第三方登录,因为当时刚起步,所以用户受众比较小,所以当时项目经理就要求我们做上第三方的登陆,以为第三方如果涉及到QQ微信那些第三方的话,因为他们的用户群体很大,所以用户的留存度会有所提升,那个时候我第一个就想到了去接入QQ的第三方接口,这个第三方登陆呢,是要遵循一个Oauth2.0.这样一个国际化的标准协议的,协议也就是等于说是保密通信协议,要求公司间不泄露密码的前提下在我这儿完成登陆,然后我去联系了QQ的第三方接入平台的客服,客服给了他们的接口服务平台的地址后我在他们的平台接口上注册了一个我们项目的账号,拿到了一个唯一id跟secret安全码,id其实这个就是给我们那个项目一个唯一标识,让他们知道我们到时候接入他们的系统的时候访问身份是谁,注册的时候还让填了一个回调地址,这个就是数据返回的时候调用的我们项目里面的controller的登陆方法。
然后就是我们在sso登陆界面加上QQ的账号登陆图标,让用户点击的时候就跳转到QQ的登陆界面,就像QQ那个界面我觉得您估计也用过,登陆完成后,QQ那边就给我们这里的发回一个随机的code码,类似UUID那样的,这个UUID就是发送给我们那时候shezhi的回调函数的路径,这就相当于它告诉我这个用户已经成功在我们这里的登陆了,让我们放行,我们拿到了这个code码之后也就只是知道该用户在你那里登陆成功了。
可是我什么其他信息dou没有,最起码我们需要知道用户的基本信息,所以我们就又得向QQ那边发起了一次请求,这次请求主要就是要获取用户的token基本信息的,这次请求是紧跟在QQ那边发回code之后发出的,用户也看不到,我们就用了httpclient来模拟http请求(前面介绍过),带上code还有原先注册第三方接入账号时候的填写的ApiKey和AccessKey(接入密匙,数据获取密匙),发送给他们后他们会返回一个token,这个token里面就包含了用户的基本信息,QQ还好,基本信息还算齐全,有的第三方就有点坑了,就像支付宝这样安全级别比较高的,他们给的用户信息真是无力吐槽,就一个用户名,头像跟性别,所以我们再接到这个token后就需要去QQ的后台去调他们的后台数据,看他们是不是跟我们的项目进行过绑定。
因为涉及到了跨平台,所以我们就用了webService请求,第三方会返回给我们一个xml信息,我们根据这个xml信息去看用户是否在他们那边有绑定信息,如果有的话我们就直接去我们的数据库去查询出添加的用户信息。保存信息到session,跳转首页-完成登陆。
要是用户以前没有登陆过我们就会跳转到用户绑定界面,让用户完善邮箱,电话等信息,然后我们把他们填写的数据和第三方的数据都保存到我们的数据库中,然后保存信息到session-跳转首页-登陆完成。
这里面用的webservice是什么?简单来说就是个http协议。内容规定使用的xml格式进行内容和数据封装使用的http消息头来说明http的内容格式,这个就是soap协议!
Webservice服务器端,也就是QQ那边他是注册到了UDDI服务器来暴露他的WSDL文件,这个文件就是相当于一个xml格式的公开接口,告诉你我有什么服务,我会返回给你什么数据,我们就是通过这个接口来获取的数据的~;
既然是服务器第三方访问,所以这种技术在本地或者局域网中获取数据就没什么用了;