jwt原理及简单实现

cookies、session和jwt的一些优缺点

先来说说cookies和session实际应用中的一些不足

  • 【缺点】cookies的安全性不好,攻击者可以通过获取本地cookies进行欺骗或者利用cookies进行CSRF攻击。
  • 【缺点】使用cookies时,在多个域名下,会存在跨域问题。
  • 【缺点】session在一定的时间里,需要存放在服务端,因此当拥有大量用户时,也会大幅度降低服务端的性能。
  • 【缺点】当有多台机器时,如何共享session也会是一个问题,也就是说,用户第一个访问的时候是服务器A,而第二个请求被转发给了服务器B,那服务器B如何得知其状态。

jwt

  • 【优点】使用JWT不需要后端进行记录,减轻服务器压力,每个token都是独立的。
  • 【优点】jwt不存在跨域问题,后台生成token返回到前台,前台保存到本地,每次请求在请求头携带token给后台进行验证即可。
  • 【缺点】token生成和验证都需要后台计算,而且由于每次向服务器发起请求都要携带token,太大了会造成请求缓慢。
  • 【中性】session比JWT好的地方在于在请求时浏览器会自动带http头部带上cookie,并且在用户持续使用时会不断地刷新session的过期时间,当浏览器关闭时自动清除session。相比之下JWT本身没法做到随着用户的使用而更新或手动清除,只能等自动过期

这里主要参考文章1  文章2

 

jwt实现

分析

编码:一个token是一串base64字符,大概分成head、payload、sign三部分,这三部分以  分割。其中head记录的是加密算法,payload记录的是你定义的一些信息,sign则是head(base64字符) + payload(base64字符) + 秘钥的加密base64字符。

解码:在payload保存过期时间,解码时判断是否过期。head(base64字符) + payload(base64字符) + 秘钥再加密看是否等于sign,不等于则被改动过。

代码实现

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Python 中,JWTJSON Web Token)的验证过程可以使用 `jwt` 库来实现。`jwt` 库提供了一些函数和方法来进行 JWT 的验证,其中最常用的是 `jwt.decode()` 和 `jwt.verify_jwt()` 函数。 `jwt.decode()` 函数用于解码和验证 JWT,并返回 JWT 中的 payload 数据。它接受三个参数:JWT 字符串、密钥和算法。 `jwt.verify_jwt()` 函数可以进行更详细的 JWT 验证,包括验证签名、过期时间、生效时间等。它接受两个参数:JWT 字符串和密钥。 下面是一个简单的示例代码,展示了如何使用 `jwt.verify_jwt()` 函数进行 JWT 的验证: ```python import jwt def verify_jwt(jwt_token, secret_key): try: # 验证 JWT decoded_token = jwt.verify_jwt(jwt_token, secret_key) print("JWT 验证成功!") print("Payload 数据:", decoded_token) except jwt.JWTExpired: print("JWT 已过期!") except jwt.JWTInvalidSignature: print("JWT 签名无效!") except jwt.JWTInvalid: print("JWT 无效!") # 要验证的 JWT jwt_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" # 密钥 secret_key = "my_secret_key" verify_jwt(jwt_token, secret_key) ``` 在上面的示例中,首先定义了一个 `verify_jwt()` 函数,它接受 JWT 字符串和密钥作为参数。然后,在函数内部使用 `jwt.verify_jwt()` 函数对 JWT 进行验证。如果验证成功,将打印出 JWT 验证成功的信息以及解码后的 payload 数据;如果 JWT 过期、签名无效或无效,将会捕获相应的异常并打印出错误信息。 需要注意的是,JWT 的验证过程中需要使用正确的密钥和算法,以确保安全性和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值