请教个 jwt 鉴权的问题

2023-07-11 13:52:54 +08:00
 cnfczn

之前 nodejs 里习惯用 session 做鉴权,验证通过 req.session 直接保存就可以了。后续不管是浏览器请求还是 ajax 都会拿到 session 。 现在打算改成 jwt ,看 w3c 标准说是放到 header 的 Authorization 里边,鉴权逻辑已经改好了,但是传递这个头信息有点麻烦。 例如: /login 验证完,json 返回 token ,后续 ajax 请求可以自己加 header ,但是浏览器直接访问的页面并不会主动带 Authorization 信息,直接访问某个 url 例如:/profile 还是未鉴权。

有没有办法全局修改浏览器在当前网站中的 Authorization 头信息呢?

3782 次点击
所在节点    Node.js
32 条回复
LawlietZ
2023-07-11 19:31:04 +08:00
你说的 session 鉴权其实也是 node 框架把登录状态保存到了 cookie 里,然后服务端解析到之后又放在了 req 对象的 session 字段里方便后端处理。
momocraft
2023-07-11 19:38:28 +08:00
HTML SSR 和 JWT 匹配不好

JWT 是个有期限且期限内不方便撤销的 secret, 让页面地址包含 JWT 等于把这个 secret 存到用户浏览记录里
不如不用 JWT
lologame
2023-07-11 19:38:58 +08:00
JSON Web Token (JWT) is a compact claims representation format
intended for space constrained environments such as HTTP
Authorization headers and URI query parameters.

https://www.rfc-editor.org/rfc/rfc7519

你的问题是如何传输 JWT 的问题,和 JWT 本身没有直接关系。
lonisletend
2023-07-11 19:50:22 +08:00

我请求用的是 axios, 可以这么封装, 登录之后写 setToken, 需要注意的是, setToken 里必须再设置一下 axios.defaults.headers.common['Authorization'], 否则登录之后紧接着的其他请求不会带着 token, 没查到为啥, 所以设置一下比较保险, 之后所有的使用 axios 的请求都会带着 token 了.
lucifer1108
2023-07-11 19:53:22 +08:00
放 cookie 里
kingjpa
2023-07-11 19:55:10 +08:00
你就当写小程序就完了,小程序咋写 页面咋写,就是给请求多一层封装
keyframes
2023-07-11 20:00:03 +08:00
按照标准的话,就自己封装请求器自己往头信息加。
其实可以改一下服务端的逻辑,从 cookie 中取出来后再验证,放 cookie 是没问题的,可以利用浏览器机制自动把信息带上去。
webcape233
2023-07-11 20:06:35 +08:00
月经贴啊,放 cookie 方便,只是怕伪造请求,但是加 https only 限制 domain 的话其实也防住了, 放 header 可以 axios 统一封装,上面的楼也说过了。
ysc3839
2023-07-11 21:30:35 +08:00
jwt 并没限制放哪,既可以放 Authorization 头里,也可以放 cookie 里
layxy
2023-07-12 09:31:41 +08:00
axios 请求前拦截把 token 加入到 header 或者直接放到 cookie 中也可以,本身这个用法没有强制约束,只要你前后端协调好就可以
libook
2023-07-13 17:37:14 +08:00
Token 也可以放在 HTTP 的 response 头里,比如用 authorization 头来返回给客户端。
客户端不管是浏览器页面还是 App ,都可以做一个统一的请求拦截器,负责管理 token ,在登陆成功后自动读取返回的 token 信息并存储在本地,拦截每一个发送的请求自动读取本地存储的 token 信息加在 authorization 头里,根据认证策略自动刷新即将过期的 token 。

比如你前端页面使用 axios 发送请求的话,可以看一下 axios 的 interceptors 相关文档。
chuck1in
2023-07-18 12:48:22 +08:00
op 不一定非要走这个 w3c 标准的,只要用了 token 其实就算是 jwt 了。

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

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

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

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

© 2021 V2EX