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

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

  •  
  •   lvlv · 98 天前 · 3012 次点击
    这是一个创建于 98 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    3,对于现在的微服务,一个请求可能需要提供给 web,微信公众号,ios,android 甚至是小程序,这时候用 token 鉴权就很省事了,统一鉴权
        30
    lvlv   98 天前
    @34C 一年多没接触了,感觉一出来什么都变了😢
        31
    lvlv   98 天前
    @cxh116
    @NullException
    @Mutoo
    @gamexg
    @whypool
    谢谢,牵涉到后端部署的看不太懂,但是明白了这个做法的必要性,阿里嘎多
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3182 人在线   最高记录 3821   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 20ms · UTC 09:50 · PVG 17:50 · LAX 01:50 · JFK 04:50
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1