最近打算看看安卓端的第三方登录 有一个疑问: 验证第三方平台的账号密码后就可以得到AccessToken 服务器可以通过AccessToken来判断是哪个用户登录了。 我想问的是 第三方平台有没有提供一个接口让服务器来验证AccessToken的合法性? 没有的话总感觉有些不安全。总感觉谁都可以传这个AccessToken到服务器来模拟他人的登录。 一般情况下应用第三方登录,服务器是怎么处理的呢?
针对你说的模拟, 怎么模拟?你知道别人正确的openid
?貌似 openid
是针对每个站点独立的标识,且token
还有生命周期, 即使你拿你库里面的token+openid
去别人站上登录也登不上去吧。
验证AccessToken的接口必然要有啊
@ravenwang 我的意思是 服务器端 而不是Android SDK中的验证接口?有吗?
@xuexb 我的意思是,服务器端在收到 token+openid 后是不是需要再验证一次token是否过期什么的? 如果不需要的话,服务器端只要接收相应的 openid 就等于登陆成功了是吗? 直接去查数据库如果有此openid就是老用户登陆,如果没有就常见新用户哦?
是的,这个问题我当时也遇到过,我用的是qq登陆,服务器端收到openid和accessToken后,用他们作为参数 调用qq的getUserInfo api作为验证。
@macross2005 服务器端调用的相关文档 能帮忙贴一下吗? 谢谢了
@sjfkai 不用吧, 我们是这样做的, 用户授权后会传给回调一个 code
码,然后后端通过 code
获取到 token
和openid
, 那个code
是有很短时间的存活率, 且必须通过TX验证, 然后回调中的openid
为用户标识, token
为密钥, 还有个expires_in
, 你可以在用户登录后更新下这个, 在发送接口(比如发说说) 前验证expires_in
时间是否过期… 即使你有openid
你也进不去啊,必须走code
这一关.
AccessToken肯定要验证不合法肯定获取不到任何信息,除非你使用第三方账号把别人的accessToken给记录下来,否则你是获取不到别人的accessToken的,有空看一下oauth2.0机制
@yunheli 如果客户端获取了accessToken 并且把accessToken 传给了服务器,服务器还需要做进一步的判断来确定accessToken是否合法、未过期吗?
借地方问个问题。不知道一个网站,使用第三方登陆的用户和使用网站自己账号登陆的用户比例是多少?我个人是不会用第三方登陆的,我觉得会有隐私问题。但是好像很多用户都用第三方登陆? P.S. 我是从用户的角度考虑的。因为从网站角度考虑肯定是第三方更好一点,能获取用户更多信息并且还能让用户推广产品。
@kilik52 拿我们的应用来说,我们应用的用户量很少,但是根据统计有25%的人在打开应用发现需要注册后,直接就退出了。
@kilik52 第三方登录有授权管理,用户可以自选暴露给网站的信息,一般来说,一个设计良好的第三方登录,需要的授权项会尽可能少。另外,第三方登录对用户来说,确实太方便了。