哪有token比较官方的资料,或者谁能详细讲解讲解什么是token?

问题描述

  • 公司现在用到csrf-token,但是我看到是从服务器获取过来,然后手工放到请求的header中
  • 在网上查资料,有的说token是每次需要拿,有的说登录时拿的,然后存起来
  • 有的说token是浏览器的功能,不需要手动操作
  • 很多都说可以防止csrf攻击,原因是原来是用cookie来存储数据,可以被获取到,那么存储token不是也可以获取到吗?

在网上查了写资料,说的比较乱,因此希望真正了解的人帮忙解答写,最好给个简单的demo

本人目前是做前端开发,也做过C#后端开发,所以希望可以给我比较详细的demo

问题

  • 究竟什么是token?工作原理是什么
  • token是平台的功能,还是一种解决方案
  • 具体如何使用?

根据大家的回答整理的答案:

http://www.ruanyifeng.com/blo...

https://mp.weixin.qq.com/s?__...

https://blog.csdn.net/u010288...

阅读 6.9k
4 个回答
  • csrf-token 主要用于防止CSRF 攻击的,也可能用于防重复提交
  • 现在通常说的token 有oauth 2.0, jwt之类生成用于登陆的 权限验证凭证
  • oauth 2.0jwt 之类的token 在服务器端生成, 用通用库(通用规范)或手工(比如当前服务器时间+用户id直接md5或直接uuid)生成
  • 浏览器不处理token, 一般自己写代码在前端维护
  • 如果token用于登陆/权限认证 是一种权限的解决方案, 有规范的也有自己随意生成的
  • token 原理就是服务器生成一个唯一标识,存起来(可以不存,但要有校验方案,比如jwt就不需要存)然后返回给客户端,客户端下次请求在header带上,后端处理时用类库或手工对比一下存在与否,是否正确。验证不通过就没有访问权限

oauth 2.0 上面虽然说了,但并不是一个生成token的方案, 而是权限认证方案,但它用到了token的概念

问题1:token是你验证身份的密钥 遵从oauth2.0规范,原理就是 用户登录的时候 把用户的相关信息 加上自己加密字符做一个hash加密生成一串字符 返回给客户端
问题2:token是一种认证方式和平台无关 就想原来后端使用session认证一样 只能说token更灵活
问题3: 登录的时候把生成的token返回给客户端保存 每次客户端向服务器发送请求的时候会在headers上带上token
服务器响应请求的时候 取出headers中的token做解析 判断是哪个用户 是否有权限访问 再做响应处理

究竟什么是token?工作原理是什么

'token' 是一个单词 ……

好吧,其实你应该问的是“CSRF”的原理与防范,这个你可以自己去找相关资源。

简单来说,考虑一种简单情况,你登录了 A 站,然后我给你发了一个网址 http://www.zouyesheng.com/ ,你点击之后,进入了这个 B 站的某个页面。

这个页面会干一个坏事,它直接发了一个“修改密码”的请求到 A 站。因为这时,在当前浏览器,你在 A 站是已登录状态,所以,这个从 B 站页面出去的请求会带上相关 cookie ,并且成功修改掉你的密码。这个就叫 CSRF ,跨域请求伪造。

那么怎么防范这类伪造请求呢?

Token, Referer 检查,验证码 等都是办法,Referer 检查会有一些问题,比如配合 XSS 它就没用了,头被修改了等。

Token 和 验证码的方式本质上是一样的,但是验证码还要让用户确认一下,在大多数场景下不适合(修改密码还可以让用户输入验证码,你不能做成提交任何一个表单都让用户填验证码吧)。

上面说的“本质”,就是指服务端要防 CSRF ,就需要验证一个 B 站不可能知道,只有 A 站知道的信息。(验证码当然算一个), token 就是 B 站不知道,而 A 站知道的信息。

好吧,到这里,如果你有点基础,可能会想到,那我在 session 中存一个 token ,然后渲染模板时放到页面中,没问题,这样是可行的。但是太麻烦。

简单的方法,其实只需要在响应时把 token 的值随便写到一个 cookie 就好了,同时页面上也放一个。这样,如果你本来就是 A 站页面,请求时自然可以带上正确的 token ,非 A 站页面,它是拿不到这个值的(B 站的一个页肯定不能在浏览器中拿到 A 站的 cookie 啊)。

服务器在验证请求时,只需要拿请求数据和 cookie 数据作一下比对即可,连后端的持久化存储都不需要用到。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题