推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
yhf
V2EX  ›  Python

jQuery 发起 AJAX 请求如何进行 Authentication

  •  
  •   yhf · Dec 2, 2015 · 4339 views
    This topic created in 3890 days ago, the information mentioned may be changed or developed.

    后端已经写好了 API ,例如删除 id 为 1 的订单: DELETE /order/1

    这个 API 是需要 authentication 的,如果用 curl 的话,大致如:curl -u username:password -X DELETE /order/1 。然后后端会验证该订单是否由认证用户创建,如果是,则可以删除。

    现在前端页面发起一个 AJAX 请求,可是我不知道该如何进行验证。显然不能把用户名和密码带上吧,而且前端页面也没有用户名和密码啊... 这种情况的 best pratice 是什么?(后端是 Flask)

    22 replies    2015-12-03 08:43:22 +08:00
    frozenshadow
        1
    frozenshadow  
       Dec 2, 2015
    请求的话,不是有 session 么?
    ryanking8215
        2
    ryanking8215  
       Dec 2, 2015
    curl -u username:password -X DELETE /order/1
    默认使用 basic authentication.

    请求头里造个头就好了
    FrankFang128
        3
    FrankFang128  
       Dec 2, 2015
    setHeaders?
    domty
        4
    domty  
       Dec 2, 2015
    jquery+ajax 不是 b/s 架构吗?
    b/s 架构有 cookie 和 session 哪,认证的时候查 session 登录状态不就行了吗
    unknownservice
        5
    unknownservice  
       Dec 2, 2015
    鉴权不是后端考虑的事吗,有 session 还不够?
    Pastsong
        6
    Pastsong  
       Dec 2, 2015
    之前也想过这个问题,似乎用加 token 的方式也可以
    demo
        7
    demo  
       Dec 2, 2015
    请不要单独的使用前端进行权限验证
    500miles
        8
    500miles  
       Dec 2, 2015
    你不用管 直接发起 ajax 请求就可以了..

    请求会自动带上 cookie 信息.

    锅就顺利到了后端 = = ,
    996635
        9
    996635  
       Dec 2, 2015
    JWT
    sarices
        10
    sarices  
       Dec 2, 2015
    直接请求的话,先登录再发起就可以啦,有 session 做验证
    sarices
        11
    sarices  
       Dec 2, 2015
    每次带账号密码请求比较麻烦,每次都要数据库比对账号密码是否正确,加重后端压力
    CosWind
        12
    CosWind  
       Dec 2, 2015
    楼上好多的貌似理解错了,后端设计 api 的规范是遵循 restful 的,认证使用了 Basic Authorization
    http://stackoverflow.com/questions/5507234/how-to-use-basic-auth-and-jquery-and-ajax
    haozhang
        13
    haozhang  
       Dec 2, 2015
    session 验证啊, ajax 发起的 http 请求会把 cookie 带上的。
    daysv
        14
    daysv  
       Dec 2, 2015
    JWT 比较好
    codeyung
        15
    codeyung  
       Dec 2, 2015
    不要前端验证 服务器有 session 和 token 都可以搞
    CosWind
        16
    CosWind  
       Dec 2, 2015
    仔细想想,不对呀, bs 的采用这种方式,难道是内部系统;好像就只看到三方平台会这么设计接口
    ccbikai
        17
    ccbikai  
       Dec 2, 2015
    这个认证是靠 header 的 Authorization 字段完成的.
    ccbikai
        18
    ccbikai  
       Dec 2, 2015
    所以往 header 加 Authorization 字段, 值是 Basic base64(username:password).

    base64(username:password) 是个函数,你应该看的懂

    jQuery.ajax 怎么添加 header ,自己看下文档
    ccbikai
        19
    ccbikai  
       Dec 2, 2015
    $.ajax({
    username: 'zhang',
    password: 'san'
    });

    jQuery 竟然支持直接传 http 认证方法



    ----

    看了下楼主需要 best pratice , 现在 http basic 认证肯定不行,换认证方式吧
    xujif
        20
    xujif  
       Dec 2, 2015
    如果是纯 restful 接口,在 bs 里使用时,建议增加一层,校验 session 。另造一个轮子 token 放在前端维护实在不是一个好主意,除非你的页面是 mvvm 纯前端。
    BOYPT
        21
    BOYPT  
       Dec 2, 2015
    best pratice 么,无非就是客户端先申请一个 token ,每次请求都带上个 token ……
    简单来说那些什么 oauth 都是这样的,作为不信任的第三方存在的时候都得这样
    changqingshuya
        22
    changqingshuya  
       Dec 3, 2015 via iPhone
    basic authentication+1
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5718 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 06:29 · PVG 14:29 · LAX 23:29 · JFK 02:29
    ♥ Do have faith in what you're doing.