为什么不建议用openid作为登录凭证?
发布于 5 年前 作者 taosu 1686 次浏览 来自 分享

在开发小程序的过程中,登录是一个入口场景,基本每个开发者都会遇到,

那么在开发过程中,我们知道

 既然openid是唯一的,那我为什么不能用openid作为凭证,还要麻烦的用个第三方session

其实我之前也一直不明白,今天看了下面这个例子,顿时豁然开朗

有可能造成数据越权。

比如今天我通过我的手机登录了微信,打开了小程序。但是明天有个朋友想用我的手机登一下微信。如果用openid作为登录凭证,登录小程序的时候检测到openid已经存在,所以不会再走登录过程,这样我的数据就让我的朋友看到了。所以还是要按照官方推荐的步骤来。

### 20191224

https://developers.weixin.qq.com/community/develop/doc/0002a028214de86e94079941551800

小明同学很稀罕同桌小花,有天看到小花在某个微信公众号写日记,好巧,猥琐的小明看到并记住了小花的开屏密码。等课间小花同学出去时,将她手机开机并打开了那个公众号,进入了个人中心。

哎呀,时间不够看呀,于是选择了用浏览器打开看到了URL。

你说巧不巧,这个站竟然在URL里有个openid的传值,没有登陆鉴权。

小明用他无比迅捷的手速把url发给了自己的号,还不着痕迹地打扫了战场。

以后的日子里,小明时刻都能通过点击那个url翻看小花的日记,真是爽煞,发起了向女神攻心的神级技能。

10 回复

token啊和过期时间

明天有个朋友想用我的手机登一下微信

这个时候openid已经换了

如果用openid作为登录凭证,登录小程序的时候检测到openid已经存在 我不太理解,这文章太水了

openid是用户id(与微信账号一一对应的),也可以做个login用账号密码登录。

1.同一个小程序下的不同微信用户的openid是不一样的

2.同一个公众号下的不同微信用户的openid是不一样的

3.同一个开放平台下的不同应用下的同一个用户的unionid是一样的

4.关于登录凭证,简单来说就是通过用户的唯一标识去服务端获取用户信息。用什么去获取,方便,唯一,安全即可。

5.session_key的用处:

1)<span style="font-size: 14px;">微信为了确保用户信息不会直接被应用直接调用api获取到,在获取用户信息或手机号时需要应用开发者提供显性授权;</span>

2)用户的私密信息在用户显性授权之后,微信会将加密后的信息返回给开发者,开发者通过sessionkey,encryptedData,iv,解密用户信息获取显性授权获取到的用户信息,比如手机号,unionid。

首先,【同一个小程序下的不同微信用户的openid是不一样的】;

其次,文章中提到的,你用手机A登录小程序A,之后,你一个朋友用手机A登录他自己的微信,他如果没有使用过小程序A的话,这个时候,小程序A是不会在这个微信的小程序列表的;如果这个时候他搜索小程序A,并打开,这个时候一定会让他去登录的,所以不会存在【登录小程序的时候检测到openid已经存在,所以不会再走登录过程】这中情况,即使你把登录状态存在缓存中,但是缓存并非跟着手机走的。

据我所知微信不同账号数据不会共享的,比如wx.setStorageSync和wx.setStorage

因为用openid做凭证,如果黑客从某些途径得到了某人的openid,可以拿着这个openid去请求你的服务接口,从而拿到数据。用第三方session做凭证,session是会刷新的吧,即使黑客拿到session,也只能用一段时间就失效了。好吧,我也不是专业后端开发,session了解不深入。

我是怎么做的呢,我用小程序的云开发的云函数,云函数会自动返回给我们一个经过鉴权的openid,这个openid可以确保是本人在访问,就没有安全问题了。

走不走登录流程和openid有啥关系?你都让你朋友用你的微信了,你还怕泄露啥?

嗯,你把密码告诉他好了 ^_^,可能他其实是想看下支付宝能不能转账

回到顶部