V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lvlv
V2EX  ›  问与答

为啥认证 token 信息要放 HTTP header 里面呢?啥时候开始流行这种认证方式的

  •  
  •   lvlv · 2018-08-09 22:30:09 +08:00 · 12839 次点击
    这是一个创建于 2292 天前的主题,其中的信息可能已经有所发展或是发生改变。

    搜索“ token 放 header ” 看到的大都是 2017-2018 的,以前不是认证信息都放 cookie 吗?如果因为 cookie 不安全,cookie 可以设置 same-site 防止 CSRF 攻击,可以设置 httpOnly 防止 cookie 劫持类攻击,如果说用户有可能禁止 cookie,不是有那种“本网站需要开启 cookie ”的提示吗?

    第 1 条附言  ·  2018-08-09 23:03:20 +08:00
    那个,楼主是做前端的,所以我想问的仅限于有浏览器的情况
    31 条回复    2018-08-10 11:47:53 +08:00
    geekcorn
        1
    geekcorn  
       2018-08-09 22:32:05 +08:00 via iPhone
    三楼觉得这个如何解释比较好...
    agagega
        2
    agagega  
       2018-08-09 22:33:10 +08:00 via iPhone
    不太明白你的意思,Authorization 字段不是 HTTP 本来的一个用法么
    lianyue
        3
    lianyue  
       2018-08-09 22:38:11 +08:00
    1. 支持跨域 跨域储存
    2. Authorization 字段本来就是用来认证的
    lvlv
        4
    lvlv  
    OP
       2018-08-09 22:41:37 +08:00
    @lianyue 那非 Ajax 请求怎么自动带上这个字段,比如静态资源类请求,毕竟登录之后每个请求都要带上这个认证信息
    @agagega 之前不都是 sessionID 放 cookie 的吗
    yangqi
        5
    yangqi  
       2018-08-09 22:44:43 +08:00
    为什么不呢?
    lianyue
        6
    lianyue  
       2018-08-09 22:45:08 +08:00   ❤️ 1
    Authorization 字段一般 是 api 通讯 前后端分离 结构
    请求 静态资源为什么 要带上这个
    mgcnrx11
        7
    mgcnrx11  
       2018-08-09 22:50:24 +08:00 via iPhone   ❤️ 1
    客户端不是浏览器就没有 cookie 了呀
    shapl
        8
    shapl  
       2018-08-09 22:53:23 +08:00   ❤️ 1
    举个例子,小程序。
    CODEWEA
        9
    CODEWEA  
       2018-08-09 22:53:44 +08:00
    不仅是认证 校验 ajax 成功与否也是利用 header
    moult
        10
    moult  
       2018-08-09 22:54:24 +08:00
    A 公司:我看 B 公司的产品是这样的,我也就这样了。
    B 公司:我看 C 公司的产品是这样的,我也就这样了。
    C 公司:???我觉得这样搞比较好看。!!
    lvlv
        11
    lvlv  
    OP
       2018-08-09 22:55:33 +08:00
    @lianyue 没有通过登录认证的用户不给他网站的静态资源的这种需求应该比较正常吧?
    lvlv
        12
    lvlv  
    OP
       2018-08-09 22:56:47 +08:00
    @shapl
    @mgcnrx11
    好吧,我目前做过的都是需要用浏览器的
    StevenTong
        13
    StevenTong  
       2018-08-09 22:59:57 +08:00
    现在手机 APP 普及了,api 放 cookie 吗?用 Authorization 做 Authenticate 很合适呀
    lvlv
        14
    lvlv  
    OP
       2018-08-09 23:06:29 +08:00
    @CODEWEA 这个是什么意思?没有看明白,Ajax 成功与否不是看`ajax.readyState==4 &&ajax.status==200` 吗?
    Zzdex
        15
    Zzdex  
       2018-08-09 23:11:48 +08:00 via iPhone
    小程序就不支持 cookie
    lvlv
        16
    lvlv  
    OP
       2018-08-09 23:14:44 +08:00
    @Zzdex
    @shapl
    好吧,楼主没做过小程序
    crab
        17
    crab  
       2018-08-09 23:19:09 +08:00
    主要还是跨域问题吧
    gamexg
        18
    gamexg  
       2018-08-09 23:24:31 +08:00 via Android   ❤️ 1
    >没有通过登录认证的用户不给他网站的静态资源的这种需求应该比较正常吧?

    @lvlv 这种很少见 cookie 限制的,老方案是普通资源不登陆不提供地址。非法用户猜到地址就可以下载。
    比较重要的资源是真实地址不可访问,直接可访问的是 php 部分,php 验证后通过 nginx 内部重定向到实际文件。这个倒是依赖 cookie。

    现在很多都是使用的对象储存,静态资源在独立域名,真需要限制在 1url 追加签名的比较多。
    CloudnuY
        19
    CloudnuY  
       2018-08-09 23:25:32 +08:00   ❤️ 1
    移动端 包括小程序这两年发展导致的吧
    34C
        20
    34C  
       2018-08-10 02:24:24 +08:00 via iPhone
    楼主是多久没有接触现代化前端了… 是不是还在用 jQuery 那种…
    Mutoo
        21
    Mutoo  
       2018-08-10 07:46:19 +08:00   ❤️ 1
    cookies 这个 request-header 和 set-cookie 这个 response-header 只能由同域的服务端接收和返回,而大多数的 API 是跨域的。。
    ericls
        22
    ericls  
       2018-08-10 08:07:01 +08:00 via iPhone
    Token 放哪儿都行
    问题是 cookie 跨域什么的 比较麻烦
    suzic
        23
    suzic  
       2018-08-10 08:30:09 +08:00 via Android
    这样比较方便
    mmdsun
        24
    mmdsun  
       2018-08-10 08:33:39 +08:00 via Android
    @lianyue header 里面跨域也要配置吧。
    NullException
        25
    NullException  
       2018-08-10 08:47:18 +08:00   ❤️ 1
    RESTFUL API 或者 JWT 了解下? https://www.iluwen.com/blog/43
    cxh116
        26
    cxh116  
       2018-08-10 08:56:08 +08:00   ❤️ 1
    有些场景或语言启用 cookies 成本太高,比如 Java ,配置多服务器实例时共享成本比较高.

    所以自己实现,只要根据 header 或 request params 来简单验证即可,而 request param 的方式,使用拦截器之类的方式不能很方便的设置为通用的,而 header 可以很方便的设置为通用默认带上.

    个人理解
    IvanLi127
        27
    IvanLi127  
       2018-08-10 08:59:03 +08:00 via Android
    你的搜索引擎坏了可能。。。一直都有放头部的额
    cjw1115
        28
    cjw1115  
       2018-08-10 11:05:16 +08:00
    @mgcnrx11 有还是有的吧,至少.net 和 java 的 httpClient 还是会保存 cookie 吧,
    whypool
        29
    whypool  
       2018-08-10 11:15:06 +08:00   ❤️ 1
    1,前后端独立部署,前端的静态文件弄个 nginx 转发就行了,不涉及后端,这时候用 cookie 就不合适,没有后端服务下发 cookie,所以 token 头拿权限就很重要了

    2,app 内嵌页面,有的是把静态资源一起打包到 app 里面,访问的方式是加载本地路径,协议是 file://,这样本地协议也是拿不到 cookie,所以还是得在请求头里面加权限

    3,对于现在的微服务,一个请求可能需要提供给 web,微信公众号,ios,android 甚至是小程序,这时候用 token 鉴权就很省事了,统一鉴权
    lvlv
        30
    lvlv  
    OP
       2018-08-10 11:45:18 +08:00
    @34C 一年多没接触了,感觉一出来什么都变了😢
    lvlv
        31
    lvlv  
    OP
       2018-08-10 11:47:53 +08:00
    @cxh116
    @NullException
    @Mutoo
    @gamexg
    @whypool
    谢谢,牵涉到后端部署的看不太懂,但是明白了这个做法的必要性,阿里嘎多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3056 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:40 · PVG 08:40 · LAX 16:40 · JFK 19:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.