V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shilielin
V2EX  ›  Flask

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

  •  
  •   shilielin · 2018-06-18 13:09:47 +08:00 · 5113 次点击
    这是一个创建于 2360 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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