ITPub博客

首页 > 数据库 > 数据库开发技术 > 我们放弃JWT作为用户认证了

我们放弃JWT作为用户认证了

原创 数据库开发技术 作者:皇子谈技术 时间:2024-09-03 17:56:11 0 删除 编辑

JWT在简单登录认证需求下,确实很方便,但是...

大家好,我是皇子。

我们一支烟花AI官网:https://agifun.love/上线了,对应的登录模块也在对接当中。

在考虑做用户认证的时候,因为网站与后端不进行频繁的交互,也没有太多的用户信息需要校验,最容易想到的当然是JWT。


JWT 它主要优点是可以在服务器之间传输用户认证信息,而不需要使用服务器端的数据库或会话存储。另外,JWT还可以用于跨域认证,因为JWT可以包含足够的信息来验证用户的身份。


但是 JWT 也有一些缺点,比如无法撤销已签发的令牌(除非它们已经过期)和如果密钥泄露,则所有令牌都将失效。

而这些缺点在我们这个系统里面是无法接受的,比如:用户会员过期后,在我们不手动更换密钥的情况下,会员权益还一直保留到JWT的过期时间。


所以今天我们先介绍下JWT技术。

JWT(JSON Web Token)是一个开放标准(RFC 7519)定义的方式,用于在网络间安全地传输信息。这些信息可以是任何类型的数据,通常用于身份验证和授权。

JWT主要由三部分组成:Header(头部)、Payload(载荷)、Signature(签名)。

下面我们一个个展开说说:

Header(头部)

Header(头部):这部分描述JWT的元数据,包括JWT的类型(通常是JWT)和所使用的签名算法(如HMAC SHA256或RSA)。

{  "alg": "HS256",  "typ": "JWT"}

然后将头部JSON使用Base64Url编码,形成JWT的第一部分。

Payload(载荷)

Payload(载荷):这部分包含需要传输的数据,也称作“声明”(claims)。声明是关于实体(通常是用户)和其他数据的声明。

声明有三种类型:registered、public、private。

  • Registered claims: 是一组预定义的声明,它们不是强制的,但是推荐。如:iss (issuer)、exp (expiration time)、sub (subject)、aud (audience)等。

  • Public claims: 可以包含任何信息,一般用来存放一些附加信息,这些信息不是JWT规定的标准字段,但也不会造成冲突。

  • Private claims: 用于在同意使用它们的各方之间共享信息,并且不是注册的或公开的声明。

例如:

{  "sub": "1234567890",  "name": "John Doe",  "admin": true}

然后将载荷JSON使用Base64Url编码,形成JWT的第二部分。

Signature(签名)

Signature(签名):为了验证JWT是否被篡改,需要对JWT的前两部分进行签名。签名需要使用Base64Url编码的头部、编码的载荷以及一个密钥。这个密钥只有服务器知道,不能泄露给客户端。

签名的计算方式是:HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)


最后,将这三部分使用.连接在一起,形成完整的JWT。


以上,点亮【赞与在看】让我们心中充满力量、披荆斩棘、不惧未来!

【推荐阅读】

虾皮面完,想开始摆烂

万物互联,究竟是什么是物联网?

WebSocket 是什么原理?为什么可以实现持久连接?

关于作者:一位热爱技术,并在职场与自媒体间探索的实践者,希望通过分享个人经验和见解,帮助更多人实现自我成长和价值。

原文作者:皇子谈技术;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-12-21

  • 博文量
    113
  • 访问量
    56516