shilielin
V2EX  ›  Flask

如何保护在小程序端保护 Flask 写的 API?

  •  
  •   shilielin · Jun 18, 2018 · 6075 views
    This topic created in 2885 days ago, the information mentioned may be changed or developed.

    打算做个小程序,所以用 Flask 写了后端 API,现在的问题是这个 API 没有加入任何的验证信息。只要知道 API 的连接构造,每个人都可以请求 API,然后修改后台的数据。

    因为我的数据都是会在小程序都请求,所以现在的想法就是能不能在微信用户初次给我小程序授权的时候,利用 unionid 生成一个初始的密码,并且利用 unionid+密码生成一个 taken,以后用户每次请求数据的时候,就通过用户的 unionid 和 taken 进行鉴权。

    不知道这样是否可行?另外想着到目前给微信小程序使用的 API 常用的处理是怎样的?

    小白用户,希望大家可以指点一下,谢谢!

    16 replies    2018-06-23 22:53:55 +08:00
    silhouette
        1
    silhouette  
       Jun 18, 2018 via Android
    token 不是 taken 哦
    rb6221
        2
    rb6221  
       Jun 18, 2018 via Android
    后端自己支持一下 token 验证不行么
    hunk
        3
    hunk  
       Jun 18, 2018
    了解下 JWT 登录。
    返回 token,保存为 cookie.
    shilielin
        4
    shilielin  
    OP
       Jun 18, 2018 via iPhone
    @silhouette 嗯,写错了
    shilielin
        5
    shilielin  
    OP
       Jun 18, 2018 via iPhone
    @hunk 如果使用 JWT 的话,是不是也要使用 httpauth 的 token 类?
    stonehe
        6
    stonehe  
       Jun 18, 2018
    flask-httpauth 这么方便简单的库为什么不拿来用
    woscaizi
        7
    woscaizi  
       Jun 18, 2018 via iPhone
    直接在服务端验证 unionId,openId 是否存在,最简单的办法吧。
    zhuangzhuang1988
        8
    zhuangzhuang1988  
       Jun 18, 2018
    用 django-rest-framework
    自己搞认证啥,api 限制啥的瞎折腾 不然直接用标准的
    KgM4gLtF0shViDH3
        9
    KgM4gLtF0shViDH3  
       Jun 18, 2018
    小程序的代码别人拿不到,不知道 root 之后能不能拿到,如果别人拿不到的话可以在客户端存个 secret 然后和时间戳什么的加密成一个 token,请求的时候把 token 带上就能验证了。
    shilielin
        10
    shilielin  
    OP
       Jun 18, 2018 via iPad
    @zhuangzhuang1988 嗯,我打算用现有的轮子,只是想知道目前大家是不是都是用 Web 和 app 一样的思路处理小程序的 API
    wzw
        11
    wzw  
       Jun 18, 2018
    flask-restful 可以去看看
    geekcorn
        12
    geekcorn  
       Jun 18, 2018 via iPhone
    理论上通过微信授权流程链接获取的 unionid 或者 openid 是没法伪造的吧,直接数据库匹配数据就行了吧,不放心就加一层 jwt 认证,推荐 pyjwt 框架
    lcy630409
        13
    lcy630409  
       Jun 19, 2018
    想复杂了,就是把 session 替换成 token
    前台在第一次联系后台的时候生成一个唯一 token,返回给前台,前台存在 cookie 里,每次请求的时候在 header 里带上这个 cookie 就行了
    mht
        14
    mht  
       Jun 19, 2018
    @bestkayle 我在一个小程序的交流群里 见过有人专门用安卓手机抓包,然后用 github 上的开源工具解包小程序代码,兜售小程序的源码来着...
    shilielin
        15
    shilielin  
    OP
       Jun 20, 2018 via iPhone
    @mht 这都可以啊
    ybark
        16
    ybark  
       Jun 23, 2018
    手机本地找到小程序代码包 wxapkg,通过 github 上有人写的反编译还原脚本(项目距发这条评论前 11 天还在更新)。理论上看,若真要有团队有时间去搞你的小程序,如果你没做特别的处理,小程序就是开源的。那么此时后端 api 带不带 token,就没区别了,整套代码跑起来,token 也能拿到,后面需要 token 的 api 也不用伪造请求。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5626 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 03:39 · PVG 11:39 · LAX 20:39 · JFK 23:39
    ♥ Do have faith in what you're doing.