V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

基于 Flask 的 RESTful API,想控制并发用户数为 1 个,但是用 Token 的话抓包拿到 Token 不就可以自己用 Token 调用 API 了吗? C/S 两端都是用 Python 的

  •  
  •   a251922581 · 76 天前 · 1211 次点击
    这是一个创建于 76 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务器端算是个应用服务器吧,Flask 搭了 RESTful API,PyQT 客户端调用 RESTful API 完成业务操作。但是卖给用户的话是按 1 个用户授权,如果用户登录后给个 Token 做以后 API 的授权的话,抓包或浏览器调试工具里找到 API 就可以无限制调用需要 Token 的 API 了,RESTful 是无状态的,一般客户公司里都一个公网 IP 出来的,有办法识别吗?还是用其它授权方案代替 Token ?
    先谢过了。。
    13 回复  |  直到 2017-07-08 09:04:24 +08:00
        1
    XYxe   76 天前   ♥ 1
    一次请求换一个 Token
        2
    lerry   76 天前 via iPhone
    https 应该抓不到吧
        3
    prasanta   76 天前 via Android
    证书呀,就像银行登陆的证书
        4
    est   76 天前
    @XYxe 挺靠谱。做个状态机。
        5
    TJT   76 天前
    证书,请求签名
        6
    jinganchuqi   76 天前 via Android   ♥ 1
    加个签名不就行了,token 参与签名。
        7
    akira   76 天前   ♥ 1
    首先,任何可以在用户机器上运行的代码都是可破解的,不管你如何限制多人访问,总是有办法可以绕过的。

    一个比较简单粗暴的方案,提交的接口参数里面,增加一个加密过的 自增字段。 然后统计自增数字有冲突的情况,基本上,就可以知道哪个账号是有多开行为了的。
        8
    ipconfiger   76 天前
    @est 试过这种方案, 不行, 网络抖动一些就隔屁了.
        9
    tomczhen   76 天前   ♥ 2
    改成按 API 调用次数收费。:doge:

    讲正经的。

    使用 jwt 来解决,在 jwt 存放用户名,token 和一个随机值(比如 uuid ),服务端保存下发的 jwt,推荐 redis。

    jwt 过期时间设定要小一些,比如 1 分钟,甚至 30 秒,如果网络不稳定可以适当延长有效时间。

    API 发现 JWT 过期时,重新生成一个 JWT 返回即可,同样服务端要保存。

    这里 jwt 和鉴权 token 可以没有关联(取决于你的业务),jwt 可以过期,但必须是有合法签名,如果业务允许,你仍然可以让他继续。

    如果使用抓包的方式获取 jwt 和 token,然后多处使用,那么在这个 jwt 过期后必然会产生,一个用户有多个不同的 jwt 同时有效的情况。
        10
    DCjanus   76 天前   ♥ 1
    使用 SSL pinning 技术增大抓包难度。
    自增字段、加密网卡号等方式都可以增加破解难度。
    破解难度高到一定程度即可,再费劲就得不偿失了。
        11
    devilyaos   76 天前 via iPhone
    所以好些软件绑死 mac...
        12
    jininij   76 天前 via Android   ♥ 1
    如果客户知道你 API 协议的细节,就可以搭建 API 中心,所有的客户端调用接口,都不是直接调用你的服务器接口,而是调用 API 中心的接口,API 中心对数据进行签名,使用队列一个一个地请求。你在服务器端没有任何办法可以知道,真正使用你服务的是谁。

    你能做的,只有尽可能让你的 API 不会被挖出来了。
        13
    vingc723   76 天前 via Android
    做头部数据的 hash ? hash 不一致就无效了,https 更好了
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   2499 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 58ms · UTC 06:02 · PVG 14:02 · LAX 23:02 · JFK 02:02
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1