评论

为什么不建议用openid作为登录凭证?

为什么不建议用openid作为登录凭证?

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

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

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


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


有可能造成数据越权。

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


### 20191224

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

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

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


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


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


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


### 20200107


更新:下面这个文章有说明为什么不用openid作为登录态


https://developers.weixin.qq.com/community/develop/doc/000c2424654c40bd9c960e71e5b009


Q2: 既然用户的openId是永远不变的,那么开发者可以使用openId作为用户的登录态么?

A:行,这是非常危险的行为。因为openId是不变的,如果有坏人拿着别人的openId来进行请求,那么就会出现冒充的情况。所以我们建议开发者可以自己在后台生成一个拥有有效期的第三方session来做登录态,用户每隔一段时间都需要进行更新以保障数据的安全性。


最后一次编辑于  01-07  
点赞 2
收藏
评论

12 个评论

  • Dave
    Dave
    2019-12-24

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

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

    2019-12-24
    赞同 2
    回复
  • 郑旭东
    郑旭东
    2019-12-24

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


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

    2019-12-24
    赞同 1
    回复 1
    • 郑旭东
      郑旭东
      2019-12-24
      可能没说清楚,我再补充一下,直接说结论:不要把openid放在客户端,也就是小程序端使用,举个栗子:小程序端发起一个请求,参数里带一个openid,服务接口根据这个openid直接查询数据就返回了,这样是不安全的。云函数里用环境里自动提供的openid是安全的。你的登录凭证跟这些逻辑相关对吧?
      2019-12-24
      回复
  • L
    L
    2019-12-24

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

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

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

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

    5.session_key的用处:

    1)微信为了确保用户信息不会直接被应用直接调用api获取到,在获取用户信息或手机号时需要应用开发者提供显性授权;

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

    2019-12-24
    赞同 1
    回复 1
    • 村姑翠花
      村姑翠花
      2019-12-24
      非常感谢,我理解下。
      2019-12-24
      回复
  • 祺爸💎
    祺爸💎
    2019-12-23

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

    这个时候openid已经换了

    2019-12-23
    赞同 1
    回复 1
    • 村姑翠花
      村姑翠花
      2019-12-23
      不会呀
      2019-12-23
      回复
  • one for all
    one for all
    2019-12-23

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

    2019-12-23
    赞同 1
    回复 6
    • 村姑翠花
      村姑翠花
      2019-12-23
      能帮我解释下,为什么不能用openid作为登录凭证 吗,虚心请教
      2019-12-23
      回复
    • one for all
      one for all
      2019-12-23回复村姑翠花
      但是你说"下面这个例子,顿时豁然开朗",  你已经豁然开朗, 该是明白人了,为什么会越权呢
      2019-12-23
      回复
    • 村姑翠花
      村姑翠花
      2019-12-23回复one for all
      只能说这个例子解释的过去,但是不是被大佬推翻了吗?我想请下,您对这块怎么理解的?
      2019-12-23
      回复
    • one for all
      one for all
      2019-12-23回复村姑翠花
      我做项目简单, 能实现功能, 代码清晰有条理,没BUG就行.  没什么理解
      2019-12-23
      回复
    • one for all
      one for all
      2019-12-23回复村姑翠花
      https://developers.weixin.qq.com/community/develop/doc/0002a028214de86e94079941551800  看一下这个二楼说的
      2019-12-23
      1
      回复
    查看更多(1)
  • 大侠大侠
    大侠大侠
    2019-12-23

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



    2019-12-23
    赞同 1
    回复
  • 村姑翠花
    村姑翠花
    01-07

    更新:下面这个文章有说明为什么不用openid作为登录态


    https://developers.weixin.qq.com/community/develop/doc/000c2424654c40bd9c960e71e5b009


    Q2: 既然用户的openId是永远不变的,那么开发者可以使用openId作为用户的登录态么?

    A:行,这是非常危险的行为。因为openId是不变的,如果有坏人拿着别人的openId来进行请求,那么就会出现冒充的情况。所以我们建议开发者可以自己在后台生成一个拥有有效期的第三方session来做登录态,用户每隔一段时间都需要进行更新以保障数据的安全性。


    01-07
    赞同
    回复
  • 英忠通信
    英忠通信
    2019-12-26

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

    2019-12-26
    赞同
    回复
  • 何以为歌
    何以为歌
    2019-12-25

    token啊和过期时间

    2019-12-25
    赞同
    回复
  • 天天修改
    天天修改
    2019-12-24

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

    2019-12-24
    赞同
    回复 1
    • 村姑翠花
      村姑翠花
      2019-12-24
      哈哈哈哈哈哈。。。。。
      2019-12-24
      回复

正在加载...

登录 后发表内容