本网站QQ第三方登录对接时是怎样解决“没有明文密码而让用户登录”问题的?

发布于 2022-09-01 06:40:26 字数 357 浏览 13 评论 0

我在系统对接QQ第三方登录时遇到一些问题,比如用户在第一次请求QQ登录时,QQ会获取登录信息并回调本网站地址,此时本网站帮它完成账号注册以及信息绑定动作。

问题来了,在第一次绑定用户信息时你可以获取到它的明文密码,此时调用你原有的用户登录流程即可。可是当用户第二次还是通过第三方登录时,你会发现只能获取到openId和accessToken,此时并不可能会有明文密码,那在调用原有的登录流程时就会有问题,因为原有的登录流程中是拿数据库里加密密码来对比的。

我现在暂时将openId默认作为用户密码,这样每次进来我都可以获取到这个值,并将它传入原有的登录流程中。这样看似解决了问题,但其实隐藏着风险。

所以想请教大家是怎样做的,有没有更好的方法???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

星星的轨迹 2022-09-08 06:40:26

你要把 openid 作为在你网站的用户名,
登录验证就是你的把 openId accessToken 发送给腾讯的服务器,服务器会把验证结果告诉你,
如果认证正确,就可以让这个用户用这个帐号登录了

第三方认证过程

首先你的服务器有个信任的服务器,比如腾讯的服务器

1、首先用户选择 第三方登录,跳转到腾讯服务器认证
2、腾讯服务器认证成功后会给用户返回一个 url 类似于 http://你的服务器/path/to/login?openId=xxxxxx&accessToken=yyyyyyy(其中,openid每个QQ号对应的唯一不变,accessToken是腾讯服务器随机生成,有有效期)
3、然后用户的页面就会跳转到这个url ,你的服务器就会从用户那里获得这个openIdaccessToken
4、你得到这个 openIdaccessToken,然后你就的服务器给腾讯的服务器(这个服务器是你可以信任的)用get/post把这两个参数发过去。然后腾讯服务器会给你答复,这个是不是有效的。
5、如果是效,那么就可以让他用这个openid登录,否则登录失败。

openid是大家都知道的,所以说可以伪造,但是accessToken是认证成功之后腾讯服务器随机生成,并且有一定的有效期的,所以即使有人伪造了两个这样的参数,在第四步,你给你信任的腾讯服务器发送这个参数的时候服务器自然会给你返回一个错误。。。

第三方认证本身就是让你不需要保存用户的密码,不需要你认证,只是第三方服务器认证用户之后,把认证结果告诉你而已,只是保存用户的唯一标识,在这个里面这个唯一的标识就是 openid

掀纱窥君容 2022-09-08 06:40:26

给用户设置一个你也不知道的随机密码

登陆匹配openid 但是不作为密码匹配

玩物 2022-09-08 06:40:26

通过QQ信任登录
第三方始终不能获取到用户密码的

且行且努力 2022-09-08 06:40:26

我只做过微信登录,由始至终都是拿不到用户密码的,因为出于安全考虑不应该把用户的微信/qq密码告诉你,但是你居然能拿到明文密码?你只要给用户表里增加一个字段,存好用户的openid,等待微信/qq告诉你有个openidxxx的用户登录了,就用这个xxx去寻找openidxxx的用户,查到了就让他登录,没查到就让他注册。

openid是每个用户唯一的标识,而且不会改变。

不用担心只使用openid登录会不安全,因为你能保证这个openid是来自腾讯的,腾讯说这个人登录了,你难道还能说不是吗?

甩你一脸翔 2022-09-08 06:40:26

做过微信登录的,其实就是通过微信授权获取access_token,然后用它获取用户的openid,在自己数据保存一个id和openid对应关系,密码随机设,下次授权登录直接从数据库判断即可

萌辣 2022-09-08 06:40:26

你可以在user表里面添加一个字段,用意:标示QQ登录用户的密码(明文),当然表里面有字段openid(字段腾讯返回,并且唯一,好像是每个QQ对应唯一的一串字符串)
这样你用QQ再次登录时可以拿到唯一的openid,根据openid拿到明文密码,这样就可以验证了。
兄弟你觉得怎么样。如有更好的方式,就拿出来一起分享一下吧。250648224

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文