详解新浪微博登录第三方网站
为什么要绑定?
答案:简化用户登录,用第三方账号实现这个网站的登录。通过绑定,还可以获得第三方账号的提供的一些接口信息,可以再本平台直接操作第三方平台,这样,即保存了本网站的用户也有利于第三方网站,实现双赢。当然最主要是的还是实现了不用注册登录
第三方登录过后用户名是多少?
用第三方登录后默认是没有用户名的,只能获得第三方提供的一个access_token来获取第三方平台的信息。所有绑定后,我们应该引导用户手动设置我们网站上的用的名,密码等基本信息,处理办法:
1、引导手动设置用户名,密码
2、为第三方网站登录后的用户设置一个随机的用户名,引导用户随后重新设置用户名。
一、常识:
什么是授权方式:授权方式即采用什么办法来使用户获得权限。
新浪中的授权方式有哪些?
1、OAuth方式
2、XAuth方式,主要用于应用分类属于桌面客户端、手机客户端。(这里不讲解)
参考:http://open.weibo.com/wiki/Authentication#HTTP.E6.99.AE.E9.80.9A.E9.89.B4.E6.9D.83.28Basic_Authentication.29.E6.96.B9.E5.BC.8F
二、OAuth方式详解:
code:授权码,用于获得Access token,获取后会变为无效(Code只允许使用一次,如获取token失败,请重新生成code,再进行授权)
Access token (访问令牌) 用第三方登陆的凭证,通过它登录第三方获取信息,他不是固定不变得,是和用户选择的授权项有关,还有他有过期时间。
Refresh_token(刷新令牌)
通过前两种种流程,获取了Access token以及Refresh token(对于具有"获取Refresh token权限"的应用),但是一般来讲,access token都有一定的失效,在刷新有效时长内必须通过Refresh token 来延迟Access token的时长。请求的流程有:https://auth.360buy.com/oauth/token通过http post请求发送刷新。
access_token有设定的有效期,当应用需求的accesstoken有效期超过设定值时,就可以通过refreshtoken来刷新accesstoken.
注意:新浪微博的Refresh Token 暂不开放。(参考:http://open.weibo.com/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98 第31条)
参考:http://help.jd.com/jos/question-594.html
如何防止第三方授权之后的token被冒用?
OAuth1.0的access token获取过来之后,就可以存到数据库里,然后长期使用,因为它有效期很长,通常有效期是无限的.
但是OAuth2.0为了增强安全性,access token的有效期被大大缩短,通常只有几个小时,也可以申请增加到几十天,但是总是会有过期的时候.
为此,OAuth2.0增加了一个refresh token的概念,这个token并不能用于请求api.它是用来在access token过期后刷新access token的一个标记.
在OAuth1.0中用户的登录状态是一直存在的.
在OAuth2.0中用户的登录状态需要通...
关于人人网,QQ中的access token 过期时间的判断:
用code去换取token的时候,会返回三个参数:现在的accesstoken的有效期是一个月,refreshtoken的有效期是两个 月,expirein是过期时间(生命期,从获得的时刻起的剩余有效时间,以秒为单位);第一次登陆的时候需要和用户的人人uid一起与网站uid关联起 来,还需要保存accesstoken的获取时间,以后调接口发新鲜事的时候先判断一下accesstoken是否过期,算法:现在的时间秒 数>accesstoken的获取时间+expirein(如果为true代表accesstoken已过期),
如果accesstoken已过期,需要用refreshtoken刷新accesstoken,
如果刷新没有取到accesstoken,代表refreshtoken也过期了,需要用户重新登陆一次人人网;
如果刷新取到了新的accesstoken、refreshtoken、expirein,需要用这些新的去替换掉关联表中的数据
建议在用户每次登陆的时候都用refreshtoken去刷新一次accesstoken,这样才会保证只有用户连续两个月没有登录才需要重新登录人人网;
需要重新获取code,然后得到access_token。
即要重新调用授权界面。需要用refreshtoken刷新accesstoken。
如果刷新取到了新的accesstoken、refreshtoken、expirein,需要用这些新的去替换掉关联表中的数据。
建议每次登陆的时候都用refreshtoken去刷新一次accesstoken。
参考:http://www.cnblogs.com/hooray/archive/2012/11/17/2774499.html
http://www.iteye.com/topic/1129210