Python JWT

Python JWT

Python JWTJSON Web Token是一种简洁的、URL安全的机制,用来表示需要在两方之间交换的要求(JWT)。它经常被用来在计算机之间传输数据和安全地验证用户。我们将在本教程中了解JWT的基础以及如何在Python中使用它们。JWT标准定义了一种明确而全面的技术,用于在各方之间安全地交换数据。这些信息可以被验证和信任,因为它是经过数字签名的。例如,当用户登录一个网站时,JWT经常被用来验证用户并在系统之间安全地发送信息。

JWT的头、有效载荷和签名表示为一个由三部分组成的字符串,用点(…)划分为几个部分。头部的两个关键部分是令牌的类型,即JWT,以及正在使用的签名技术,如HMAC SHA256或RSA。断言在有效载荷中。声称由补充元数据和关于一个实体(通常是用户)的声称组成。注册索赔、公共索赔和私人索赔是索赔的三个不同类别。为了提供可用的、可互操作的权利要求的集合,鼓励但不要求有一套预先确定的权利要求,即注册的权利要求。Iss(发行者)、exp(过期时间)、sub(主体)、aud(受众)和其他术语是注册索赔的例子。JWT的签名被用来确认发送者是他们所声称的人,并保证消息在传输过程中没有被改变过。

为了在Python中使用JWT,我们需要安装一个支持它的库。有几个库可以在Python中对JWT进行编码和解码,包括PyJWT、Jose和python_jose。在这篇文章中,我们将以PyJWT为例。

首先,我们需要用pip安装PyJWT库。

pip install pyjwt

一旦该库安装完毕,我们就可以开始使用它来编码和解码JWT。让我们从编码JWT开始。

import jwt

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

payload = {
  "sub": "1234967890",
  "name": "John Doe",
  "iat": 1516239022
}

secret = "Ravipass"

encoded_jwt = jwt.encode(payload, secret, algorithm='HS256', headers=header)
print(encoded_jwt)

输出

Python JWT

解释

在这个例子中,我们首先定义了JWT的头和有效载荷。头部包含签名算法(HS256)和令牌的类型(JWT)。有效载荷包含索赔,如主题(sub)、名称和签发时间(iat)。我们还定义了一个秘密密钥(Ravipass),将用于签署令牌。然后,我们使用PyJWT库中的编码函数,用秘密密钥和算法对有效载荷和标题进行编码。该函数将编码后的JWT返回为一个字节字符串,可以发送到客户端或服务器。

现在我们已经对JWT进行了编码,让我们对它进行解码,以验证这些要求。

import jwt

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

payload = {
  "sub": "1234577890",
  "name": "John Doe",
  "iat": 1516299022
}

secret = "Ravipass"

encoded_jwt = jwt.encode(payload, secret, algorithm='HS256', headers=header)
print(encoded_jwt)
decoded_jwt = jwt.decode(encoded_jwt, secret, algorithms=['HS256'])
print(decoded_jwt)

输出

Python JWT

解释

这段代码演示了如何使用PyJWT库来编码和解码一个JSON Web Token(JWT)。头部 “变量是一个包含 “alg”(算法)和 “typ”(类型)字段的字典,它们分别被设置为 “HS256 “和 “JWT”。”payload “变量是一个字典,包含关于JWT的主题、名称和发布时间的信息。”秘密 “变量是一个字符串,用作编码和解码JWT的密钥。

JWT使用jwt.encode()函数进行编码,该函数将有效载荷、秘密和算法作为参数。编码后的JWT会被打印到控制台。

使用jwt.decode()函数对JWT进行解码,该函数将编码的JWT和秘密作为参数。解码后的JWT被打印到控制台,这将给出我们所编码的原始有效载荷。

在相信这些说法之前,验证JWT的签名也很重要。这可以通过在解码JWT时将验证参数传递为True来完成。

import jwt

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

payload = {
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

secret = "Ravipass"

encoded_jwt = jwt.encode(payload, secret, algorithm='HS256', headers=header)
print(encoded_jwt)
decoded_jwt = jwt.decode(encoded_jwt, secret, algorithms=['HS256'])
print(decoded_jwt)
try:
    decoded_jwt = jwt.decode(encoded_jwt, secret, algorithms=['HS256'],verify=True)
    print(decoded_jwt)
except jwt.exceptions.InvalidSignatureError:
    print("Invalid signature.")

输出

Python JWT

解释

在这个例子中,如果签名无效,解码函数将引发一个InvalidSignatureError,我们可以用一个try-except块来处理。

总结一下,JWT是一个在各方之间安全传输信息的强大标准。借助于PyJWT这样的库,在Python中实现它很简单。重要的是要牢记安全的最佳实践,比如包括过期时间,以及在信任债权之前验证令牌的签名和过期时间。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程