python中JWT的简单介绍

本篇文章给大家带来的内容是关于python中jwt的简单介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

基于session认证所显露的问题
Session: 每个用户经过我们的应用认证之后,我们的应用都要在服务端做一次记录,以方便用户下次请求的鉴别,通常而言session都是保存在内存中,而随着认证用户的增多,服务端的开销会明显增大。

扩展性: 用户认证之后,服务端做认证记录,如果认证的记录被保存在内存中的话,这意味着用户下次请求还必须要请求在这台服务器上,这样才能拿到授权的资源,这样在分布式的应用上,相应的限制了负载均衡器的能力。这也意味着限制了应用的扩展能力。

CSRF: 因为是基于cookie来进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。

立即学习“Python免费学习笔记(深入)”;

JWT的构成
第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature).

header
jwt的头部承载两部分信息:

声明类型,这里是jwt
声明加密的算法 通常直接使用 HMAC SHA256
完整的头部就像下面这样的JSON:

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

登录后复制

然后将头部进行base64加密(该加密是可以对称解密的),构成了第一部分.

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
payload
载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分

标准中注册的声明
公共的声明
私有的声明
标准中注册的声明 (建议但不强制使用) :

iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
signature
JWT的第三部分是一个签证信息,这个签证信息由三部分组成:

header (base64后的)
payload (base64后的)
secret
这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。
将这三部分用.连接成一个完整的字符串,构成了最终的jwt
secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。

优点
因为json的通用性,所以JWT是可以进行跨语言支持的,像JAVA,JavaScript,NodeJS,PHP等很多语言都可以使用。
因为有了payload部分,所以JWT可以在自身存储一些其他业务逻辑所必要的非敏感信息。
便于传输,jwt的构成非常简单,字节占用很小,所以它是非常便于传输的。
它不需要在服务端保存会话信息, 所以它易于应用的扩展
安全相关
不应该在jwt的payload部分存放敏感信息,因为该部分是客户端可解密的部分。
保护好secret私钥,该私钥非常重要。
如果可以,请使用https协议

以上就是python中JWT的简单介绍的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2534408.html

(0)
上一篇 2025年3月5日 21:30:39
下一篇 2025年3月5日 21:30:47

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 怎么找到黑客的联系方式?

    如果你想要找到黑客的联系方式,那么你可能面临以下难题:黑客往往会隐藏他们的身份,并且他们的联系方式很难被发现。php小编草莓在这里为你提供了一份指南,旨在帮助你找到黑客的联系方式。在本指南中,我们将介绍一些常见的黑客使用的联系方式,并提供一…

    2025年3月5日
    200
  • python基础题目总结(附答案)

    本篇文章给大家带来的内容是关于python基础题目总结(附答案),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1、为什么学习Python? 人生苦短?人间不值得?想想自己的初心吧! 2、通过什么途径学习的Python? …

    编程技术 2025年3月5日
    200
  • Python中raise 与 raise … from之间有何区别?

    本篇文章给大家带来的内容是关于Python中raise 与 raise … from之间有何区别?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 起步 python 的 raise 和 raise from 之间…

    编程技术 2025年3月5日
    200
  • python中的yield关键字的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于python中的yield关键字的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 yield是python的一个关键字,刚接触python的时候对这个关键字一知半解,掌握之…

    编程技术 2025年3月5日
    200
  • python中的排序操作和heapq模块的介绍(代码示例)

    本篇文章给大家带来的内容是关于python中的排序操作和heapq模块的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 说到排序,很多人可能第一想到的就是sorted,但是你可能不知道python中其实还有…

    编程技术 2025年3月5日
    200
  • 如何使用Python生成MAC地址

    在python中,可以使用uuid.getnode()来生成mac地址,在format()、re()来设置mac地址的输出格式。下面我们就来具体看看python获取mac地址的方法,希望对你们有所帮助。 什么是MAC地址? MAC地址,也称…

    2025年3月5日 编程技术
    200
  • flask-migrate扩展的用法介绍(附代码)

    本篇文章给大家带来的内容是关于flask-migrate扩展的用法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 flask-migrate一个用来做数据迁移的falsk扩展,一般都是结合flask-sqla…

    编程技术 2025年3月5日
    200
  • Django数据库连接丢失的问题解决(示例讲解)

    本篇文章给大家带来的内容是关于django数据库连接丢失的问题解决(示例讲解),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 问题 在Django中使用mysql偶尔会出现数据库连接丢失的情况,错误通常有如下两种 1. `…

    编程技术 2025年3月5日
    200
  • Python3列表的基础学习(附示例)

    本篇文章给大家带来的内容是关于python3列表的基础学习(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 前言: 好久不见,突然发觉好久没写博客了,最近迷上了 Python 无法自拔,了解了一下,Python 简…

    编程技术 2025年3月5日
    200
  • Python自定义对象实现切片功能的介绍(代码示例)

    本篇文章给大家带来的内容是关于python自定义对象实现切片功能的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1、魔术方法:__getitem__() 想要使自定义对象支持切片语法并不难,只需要在定义类…

    编程技术 2025年3月5日
    200

发表回复

登录后才能评论