blog icon indicating copy to clipboard operation
blog copied to clipboard

posts/go/gin/2018-02-14-jwt/

Open utterances-bot opened this issue 4 years ago • 27 comments

「连载五」使用 JWT 进行身份校验

https://eddycjy.com/posts/go/gin/2018-02-14-jwt/

utterances-bot avatar May 31 '20 04:05 utterances-bot

这里jwt生成的token存在了哪个地方呢, 也没放存在mysql里面啊

jmy10241024 avatar May 31 '20 04:05 jmy10241024

@jmy10241024 是的,我也想问这个问题。Auth 只是在 auth.go 里面出现过,生成之后,没有存储。

FicowShen avatar Jun 03 '20 23:06 FicowShen

把用户名和密码用于生成JWT,请问作者,您在生产环境也是这么做的吗?

FicowShen avatar Jun 04 '20 00:06 FicowShen

要通过上面的示例代码获取到Token,应该去掉 CheckAuth 那一层判断吧?CheckAuth 是用来限制用户登录的?

FicowShen avatar Jun 04 '20 00:06 FicowShen

“我们现在的 API 是可以随意调用的,这显然还不安全全” 多了一个全字

1506430045 avatar Jun 04 '20 01:06 1506430045

用户名和密码都直接放在 Claims 里面,这很危险诶。别人拿到token直接 base64 解码就可以看到帐号密码的明文了 😹

FicowShen avatar Jun 14 '20 00:06 FicowShen

用户名和密码直接用来生成token确实不太好,可以用用户ID和用户名去生成。楼上说base64解码,比较搞笑~

Walker-P avatar Sep 09 '20 07:09 Walker-P

@FicowShen @jmy10241024 HS256是对称加密,应该是这个原因不需要存储到数据库

Walker-P avatar Sep 09 '20 07:09 Walker-P

@FicowShen @jmy10241024 HS256是对称加密,应该是这个原因不需要存储到数据库

你自己去试试就知道了。我按照他的代码生成了字符串之后去进行base64解码,所有信息都一览无遗的~

FicowShen avatar Sep 10 '20 02:09 FicowShen

用户名和密码直接用来生成token确实不太好,可以用用户ID和用户名去生成。楼上说base64解码,比较搞笑~

看一下这个图: image

搞笑吧~

FicowShen avatar Sep 10 '20 02:09 FicowShen

@FicowShen 那你可以用用户ID与用户的其他信息去生成,不要用用户密码就解决了

Walker-P avatar Sep 11 '20 01:09 Walker-P

可以加入双向验证,服务端生成的token在二次加密(不可逆),然后返回至客户端,客户端拿到token再去跟服务器交流会话,服务器按对应的token在本地查找是否存在,然后在做对应的解析

JoiLa avatar Sep 20 '20 06:09 JoiLa

正常的JWT模式, token应该带Header头中

YuZongYangHi avatar Oct 28 '20 06:10 YuZongYangHi

var jwtSecret []byte("设置本地密钥")

eippbx avatar Nov 04 '20 07:11 eippbx

jwt的payload部分确实不应该存放敏感信息,因为该部分是客户端可解密的。但是即使解密也分发不了token,因为少了secret私钥,secret是存储在服务端。

Angbro avatar Nov 25 '20 10:11 Angbro

token超时的话 jwt.ParseWithClaims会直接返回错误 类似于 token is expired by 14m11s

zjfsdnu avatar Jan 11 '21 07:01 zjfsdnu

记录一个生成Token的错误:如果生成时报key is of invalid type先看一下util/jwt.go用的tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)是不是HS256的,千万不要粗心写成ES256!!!(前车之鉴QAQ)

顺带贴一个在debug的时候发现的另一个小坑,即func (*jwt.Token).SignedString(key interface{})中的key要用[]byte https://github.com/dgrijalva/jwt-go/issues/65

hamburgerdog avatar Feb 08 '21 13:02 hamburgerdog

用户名和密码直接用来生成token确实不太好,可以用用户ID和用户名去生成。楼上说base64解码,比较搞笑~

看一下这个图: image

搞笑吧~

是不是没设置jwtSecret,如果设置了应该会签名加密才对

readlnh avatar Feb 28 '21 16:02 readlnh

用户名和密码直接用来生成token确实不太好,可以用用户ID和用户名去生成。楼上说base64解码,比较搞笑~

看一下这个图: image 搞笑吧~

是不是没设置jwtSecret,如果设置了应该会签名加密才对

我仔细看了看jwt的文档,发现你是对的,就不应该把敏感信息放在jwt里

readlnh avatar Mar 05 '21 05:03 readlnh

@hamburgerdog 感谢,差点掉坑里出不来了

cai-hd avatar Apr 10 '21 04:04 cai-hd

似乎https://github.com/dgrijalva/jwt-go这个库不再维护。

noecs avatar Jul 23 '21 03:07 noecs

大家何必纠结,这只是一个demo演示,师傅领进门,修行在个人,既然知道哪里可能出现安全隐患,就可以自己去解决,这样有目的的学习进步更大。

bigdllmask1333 avatar Sep 10 '21 01:09 bigdllmask1333

有人可以解析下jwt-go 怎样解密获取user的id吗?感谢。

yoage avatar Nov 19 '21 13:11 yoage

用户名和密码直接用来生成token确实不太好,可以用用户ID和用户名去生成。楼上说base64解码,比较搞笑~

看一下这个图: image

搞笑吧~

jwt不是普通的base64,推荐用这个解析 参考资料:https://jwt.io/introduction/ 解码工具:https://jwt.io/#debugger

mzky avatar Nov 22 '21 01:11 mzky

真正做的适合密码就不会明文存储了啊

FirmDiary avatar Dec 21 '21 06:12 FirmDiary

本人:前端同学 (三年前端+1年IOS native 开发 目前在newegg) 观点:

  1. 真实业务中 jwt里确实不应该放 密码等隐私问题
  2. 煎鱼打算 的golang demo是带你入门为目标的,真实 场景下 还需要考虑很多,比如 POST PUT 的参数应该放 body中,authToken应该放在请求头中 ,jwt签名的时候需要把ini文件中的,盐🧂 加进去
  3. 对于多用户登录的系统 jwt应该是放到redis中去维护的

以上是我工作中 和我司的落地运用

BM-laoli avatar Jan 09 '22 05:01 BM-laoli

token 分有状态和无状态两种 jwt就是无状态的 意思就是无法通过一个状态将token失效,无状态的token作用就是为了减少对数据库查询减少数据库压力,不进行token存储

baqmxdsny avatar Oct 06 '22 10:10 baqmxdsny