V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2015-12-02 14:52:33 +08:00 · 3724 次点击
    这是一个创建于 3313 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    22 条回复    2015-12-03 08:43:22 +08:00
    frozenshadow
        1
    frozenshadow  
       2015-12-02 14:59:25 +08:00
    请求的话,不是有 session 么?
    ryanking8215
        2
    ryanking8215  
       2015-12-02 15:13:30 +08:00
    curl -u username:password -X DELETE /order/1
    默认使用 basic authentication.

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

    请求会自动带上 cookie 信息.

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

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

    jQuery.ajax 怎么添加 header ,自己看下文档
    ccbikai
        19
    ccbikai  
       2015-12-02 16:04:46 +08:00
    $.ajax({
    username: 'zhang',
    password: 'san'
    });

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



    ----

    看了下楼主需要 best pratice , 现在 http basic 认证肯定不行,换认证方式吧
    xujif
        20
    xujif  
       2015-12-02 16:06:49 +08:00
    如果是纯 restful 接口,在 bs 里使用时,建议增加一层,校验 session 。另造一个轮子 token 放在前端维护实在不是一个好主意,除非你的页面是 mvvm 纯前端。
    BOYPT
        21
    BOYPT  
       2015-12-02 16:07:11 +08:00
    best pratice 么,无非就是客户端先申请一个 token ,每次请求都带上个 token ……
    简单来说那些什么 oauth 都是这样的,作为不信任的第三方存在的时候都得这样
    changqingshuya
        22
    changqingshuya  
       2015-12-03 08:43:22 +08:00 via iPhone
    basic authentication+1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   927 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:17 · PVG 05:17 · LAX 13:17 · JFK 16:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.