渣渣写了一篇关于 Web 前后端之间认证技术的文章

2018-02-23 12:22:07 +08:00
 Kilerd

嗯,这本来是写给我那个刚刚入门后端的同学看的,所以文风不会很严谨,用的是比较通俗的文字来大概讲清楚几种技术的流程

技术面涉及 Cookies Session Token JWT

有兴趣的可以去看看 浅谈 WEB 用户验证的几种方式

如有错误,欢迎指出,谢谢

(顺便帮博客拉点人气

2098 次点击
所在节点    分享发现
11 条回复
xmsz
2018-02-23 13:51:05 +08:00
不是
什么是『 Web 前后端 之间 认证』???
470326964
2018-02-23 13:59:59 +08:00
点个赞
loy6491
2018-02-23 14:12:52 +08:00
以为会讲 csrf
Kilerd
2018-02-23 14:16:24 +08:00
@loy6491 csrf 这个其实不难吧。
RqPS6rhmP3Nyn3Tm
2018-02-23 15:12:49 +08:00
我一般用 token 和 hmac 就差不多了。
主要是懒
KuroNekoFan
2018-02-23 15:30:16 +08:00
不错
chairuosen
2018-02-23 15:33:29 +08:00
其实本质都是 token,不同形式的 token,不同内容的 token 而已
hxsf
2018-02-23 15:35:59 +08:00
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 最常见的不是 文件 + 内存 么。。。
Kilerd
2018-02-23 22:33:17 +08:00
@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 等内存类数据库)

感谢你的纠正。
如果是因为我文章描述有误导致你理解出错,我表示十分抱歉
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 (会话管理) 的一种客户端实现。
Kilerd
2018-02-23 23:28:53 +08:00
@hxsf 那实际上 2 上面我的理解也是这样。

如果是同域就会把 cookies 带上,不同域或者出现非普通访问的时候就需要显式传递 cookies

可能是我在写文章的时候,一脑子都想到了「前后端分离」的情况去了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/431866

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX