嗯,这本来是写给我那个刚刚入门后端的同学看的,所以文风不会很严谨,用的是比较通俗的文字来大概讲清楚几种技术的流程
技术面涉及 Cookies Session Token JWT
有兴趣的可以去看看 浅谈 WEB 用户验证的几种方式
如有错误,欢迎指出,谢谢
(顺便帮博客拉点人气
1
xmsz 2018-02-23 13:51:05 +08:00
不是
什么是『 Web 前后端 之间 认证』??? |
2
470326964 2018-02-23 13:59:59 +08:00
点个赞
|
3
loy6491 2018-02-23 14:12:52 +08:00 via iPhone
以为会讲 csrf
|
5
RqPS6rhmP3Nyn3Tm 2018-02-23 15:12:49 +08:00 via iPhone
我一般用 token 和 hmac 就差不多了。
主要是懒 |
6
KuroNekoFan 2018-02-23 15:30:16 +08:00
不错
|
7
chairuosen 2018-02-23 15:33:29 +08:00
其实本质都是 token,不同形式的 token,不同内容的 token 而已
|
8
hxsf 2018-02-23 15:35:59 +08:00 1
1.
>> HTTPS 无法加密 URL 内容。新版提案在促进这个过程 HTTPS 无法对中间人保密“访问的站点”(即中间人知道你访问了哪个域名 or ip ),但中间人看不到具体路径。 2. >> 前后端分离时 :并且前端采用 axios 来构建一个 HTTP 连接时,不会自动加上 Cookies,所以 Cookies 在前后端分离中并不能使用。 不自动带 cookie 是因为 cors 的原因,这锅 axios 不背。合理的 cors 策略可以自动带 cookie 的。 3. >> Session 是依赖 Cookies 存在的,所以在前后端分离中自然不能使用。 sessionID 不放 cookie,让前端每次放 header 里可以不? sessionID 就是个 token session 是个后端技术,cookie 是个前端技术,两者通常一起被使用。并不是谁归属于谁。 4. >> 简单来说,JWT 是 Token 的具体且应用广泛的实现。 >> 上文讲到 Token 可以理解成为用户自己实现的 Session,那么 JWT 在某种程度上可以理解为自己实现的 Cookies 这两句是不是矛盾了? jwt 你也可以只在 payload 里存个 id 啊。 5. session 最常见的不是 文件 + 内存 么。。。 |
9
Kilerd OP @hxsf 是否感谢认真阅读
1. 认识不足,多谢指出(没太认真去读 HTTPS 的相关内容 2. 因为通常在使用 axios 的时候,不会使用同一个 session 来访问,所以默认是不会带上 Cookies 的(也可能我不是职业前端,对 axios 认识不足。 3. 对于 session 来说,业界普遍都是采取在 cookies 中存 session-id,从而达到对用户透明。这是在传统的非分离式开发的情况。当然了你都把他放在 header 里面了,还叫 session,我也没有办法。 而且在文中,我对 session 的评价是 「 Session 是在 Cookies 发展中为了解决 Cookies 某些弊端而产生的技术,但是本质上还是 Cookies 的使用。」 和 「 Session 是依赖 Cookies 存在的,所以在前后端分离中自然不能使用。」 我并没有说过 Session 是属于 Cookies 的一部分。 可是事实上 Session 确实是利用了 Cookies Max-age 来做到「关闭浏览器失效」的功能 4.「上文讲到 Token 可以理解成为用户自己实现的 Session,那么 JWT 在某种程度上可以理解为自己实现的 Cookies 」 这点,我认为类似的方向指的是「 Token 和 Session 通常是在 Client 端储存 ID,而 cookies 和 JWT 在 ID 的前提上还可以储存 非敏感信息」。会不会是你理解出错了,也可能是我文笔不好 5. 可能是我描述不太妥当,我想表示的意思是,session 如果按可访问性来讲的话,可以分为两类: 一为只能自己访问(应用内储存),二为跨应用访问(文件,Redis 等内存类数据库) 感谢你的纠正。 如果是因为我文章描述有误导致你理解出错,我表示十分抱歉 |
10
hxsf 2018-02-23 23:04:52 +08:00
@Kilerd #9 可能我对 cookie & session 的描述不太清楚。
2. axios 在浏览器中使用会使用 xhr 来进行请求(在 node 环境中会使用 node 的 http 库),xhr (不管你用 jq 还是啥,这些库发起的异步请求最后都是采用 浏览器的 xhr 或 fetch 接口来进行的。)(包括 fetch 也是)会根据 同源策略来自动附加同域的 cookies,对于跨域请求,则不会带 cookie,需要前端显式设置传递 cookies 并且 后端也显式允许传递 cookies 才会传递 cookies。 3. 这可能是每个人对 cookie & session 界定的不同而导致的。 session 是个概念。由于 HTTP 协议是无状态的,但很多情况是需要状态的,也就是 会话管理( session )。 session 的实现方案有很多种(比如 url 里带唯一标识)。一开始大家都各搞各的,93 年网景发明了 cookie 也就是 浏览器端的状态管理机制( rfc-2109 也定义了 cookie ) 可以说 cookie 是 session (会话管理) 的一种客户端实现。 |