WebApi 如何实现二维码过期? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
cobyx
V2EX    程序员

WebApi 如何实现二维码过期?

  •  
  •   cobyx 2021-04-01 17:37:49 +08:00 3365 次点击
    这是一个创建于 1653 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是这样的,有一个签到的需求,为了防止拍照二维码给别人扫签到,所以想弄一个二维码过期的功能 求实现思路

    27 条回复    2021-04-02 22:22:21 +08:00
    hjosama
        1
    hjosama  
       2021-04-01 17:43:30 +08:00
    把二维码指向的链接加上时间戳,然后链接的请求接口进行控制,业务逻辑上,将请求过来的时间戳进行分析,然后判断时间区间,然后就可以设置过期时间了
    zhoudaiyu
        2
    zhoudaiyu  
    PRO
       2021-04-01 17:43:35 +08:00 via iPhone
    延迟队列?时间轮?
    2kCS5c0b0ITXE5k2
        3
    2kCS5c0b0ITXE5k2  
       2021-04-01 17:45:03 +08:00
    肯定是带 token 后台判断拉. 这种不是很简单吗
    hjosama
        4
    hjosama  
       2021-04-01 17:45:36 +08:00
    只要请求的时间戳大于链接生成时的时间戳比如 5 分钟,就判断为过期
    2kCS5c0b0ITXE5k2
        5
    2kCS5c0b0ITXE5k2  
       2021-04-01 17:45:40 +08:00
    再加上定位 完美解决拍照二维码给别人扫签到
    imn1
        6
    imn1  
       2021-04-01 17:46:30 +08:00
    两个简单思路,应该还有其他的
    1. 字串是动态的,隐含时间信息
    2. 生成的图片是有时效的
    应该第一个更广泛,甚至可以客户端判断失效,无需传到服务器端才判断,反正跟身份验证器的数字一个意思
    hjosama
        7
    hjosama  
       2021-04-01 17:46:44 +08:00
    @emeab 原来如此!哥哥好聪明,根据 token 直接就知道是谁扫的二维码了,防止别人扫了,好厉害!
    telung
        8
    telung  
       2021-04-01 17:46:48 +08:00   3
    招一个人坐在那边对着表格看是不是过期
    hjosama
        9
    hjosama  
       2021-04-01 17:48:03 +08:00
    @telung 噗嗤,这种人力劳动好可爱
    alan0liang
        10
    alan0liang  
       2021-04-01 17:49:43 +08:00 via Android
    之前想过这个问题,直播( Zoom,腾讯会议)可以绕过一切只靠时间判断的检测
    2kCS5c0b0ITXE5k2
        11
    2kCS5c0b0ITXE5k2  
       2021-04-01 17:50:46 +08:00
    @hjosama 我的说的 token 和你说的时间戳是一个意思.
    2kCS5c0b0ITXE5k2
        12
    2kCS5c0b0ITXE5k2  
       2021-04-01 17:51:42 +08:00
    但是时间戳太容易被生成了. 所以建议后台维护一个短期 token. 来判断.
    mogg
        13
    mogg  
       2021-04-01 17:51:50 +08:00
    `为了防止拍照二维码给别人扫签到`这个需求我想起来一个叫“猫途校园的小程序”,每个人自己生成一个二维码,已经签到的人 A 扫 B 的二维码可以让 B 也签到。
    hjosama
        14
    hjosama  
       2021-04-01 17:52:54 +08:00
    @emeab 感觉这样还是好麻烦呢,不让别人扫的话,进行身份校验不是更快吗
    cobyx
        15
    cobyx  
    OP
       2021-04-01 18:07:45 +08:00
    @emeab 目前我也是打算后台存个短期 token 判断,但是不知道大概设置多久的有效期? 5s 30s?时间长了还是会被拍照扫吧。。
    2kCS5c0b0ITXE5k2
        16
    2kCS5c0b0ITXE5k2  
       2021-04-01 18:12:18 +08:00
    @cobyx 那就再加上用户识别 + 定位
    JmmBite
        17
    JmmBite  
       2021-04-01 18:14:13 +08:00
    定位 + token + 隐藏水印(拍照后不显示那种)
    cobyx
        18
    cobyx  
    OP
       2021-04-01 18:16:44 +08:00
    @emeab 目前就这样吧,加定位的话改的太多了,谢谢
    Wincer
        19
    Wincer  
       2021-04-01 18:17:14 +08:00
    这种情况完全用不着后台存 token,担心时间戳被攻破可以加密一下再集成到 URL 里(许多库是做这个的( Python 有 itsdangerous )),验证过期时,直接解密除时间然后算与当前时间的 diff 就行。嫌加解密自己实现麻烦的话,使用 JWT
    opengps
        20
    opengps  
       2021-04-01 18:18:01 +08:00
    二维码就是个网址,网址带一个参数(叫做 token 也行,ticket 也罢),然后这个参数,后台做记录,扩展出创建时间之类的,访问网址就通过扩展信息去判断
    eason1874
        21
    eason1874  
       2021-04-01 18:23:02 +08:00
    这个看你的 token 有没有状态,有状态你直接存多一个有效期就行了。

    无状态就用 JWT,expires_in 设置一分钟,就可以了。
    yujiang
        22
    yujiang  
       2021-04-01 18:25:47 +08:00 via Android
    集成到微信里要求绑定微信用户?
    jmk92
        23
    jmk92  
       2021-04-01 18:27:24 +08:00
    前端 js 实现过期,后端也是过期的逻辑,为了避免误差,比前端多个几秒。
    二维码是个网址,完全可以带个参数,防止生成还可以用可逆的加密,比如把当前时间作为参数,你后端不方便判断吗。
    noobma
        24
    noobma  
       2021-04-01 18:47:34 +08:00
    放 redis 吧,key 设置过期时间,如果签到使用后把 key 删掉
    zjb861107
        25
    zjb861107  
       2021-04-01 19:43:24 +08:00
    参数添加一个没用的字符串,生成一个比较长的 URL 。这样当场扫码还好一点,但是拍照以后再给别人扫,因为拍照的光照和角度原因就不容易成功了。

    至于具体这个随机的字符串要多长,可以 A/B 测试根据具体效果来调整
    tonyaiken
        26
    tonyaiken  
       2021-04-01 23:57:11 +08:00 via iPhone
    @hjosama 时间戳明文会被伪造吧?
    dingwen07
        27
    dingwen07  
       2021-04-02 22:22:21 +08:00 via iPhone
    用 OATH-TOTP 生成一个 30 秒有效期的 OTP 加在二维码的链接里,明文还是加密随意
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2824 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 14:18 PVG 22:18 LAX 07:18 JFK 10:18
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86