API开发:JWT:创建与验证JWT的步骤.docxVIP

  • 14
  • 0
  • 约1.22万字
  • 约 15页
  • 2025-08-03 发布于辽宁
  • 举报

PAGE1

PAGE1

API开发:JWT:创建与验证JWT的步骤

1JWT简介

1.1JWT的概念

JSONWebToken(JWT)是一种用于在各方之间安全传输信息的开放标准(RFC7519)。JWT作为JSON对象,可以轻松地在Web应用程序之间共享。JWT的主要优势在于它能够以一种紧凑、自包含的方式携带信息,这意味着JWT无需查询数据库即可验证和读取信息。

1.2JWT的结构

JWT由三部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature)。这三部分通过点号(.)连接。

1.2.1头部(Header)

头部通常包含两个部分:类型(typ)和加密算法(alg)。例如:

{

alg:HS256,

typ:JWT

}

1.2.2载荷(Payload)

载荷是JWT的主体部分,包含声明(Claims)。声明是关于实体(通常为用户)的信息,例如:

{

sub:1234567890,

name:JohnDoe,

iat:1516239022

}

1.2.3签名(Signature)

签名部分用于确保JWT未被篡改。它使用头部中指定的加密算法和一个密钥(Secret)生成。例如,使用HMACSHA-256算法:

Base64UrlEncode(Header)+.+Base64UrlEncode(Payload)

然后使用密钥和算法对上述字符串进行签名,生成签名部分。

1.3JWT的工作原理

JWT的工作流程如下:

创建JWT:当用户登录时,服务器会生成一个JWT,并将其发送给客户端。

存储JWT:客户端将JWT存储在本地,例如在浏览器的Cookie或LocalStorage中。

发送JWT:客户端在每次请求时将JWT附加在HTTP请求的Authorization头中。

验证JWT:服务器接收到请求后,会验证JWT的签名,确保其未被篡改,并检查载荷中的声明是否有效。

使用JWT:如果JWT验证成功,服务器将允许客户端访问请求的资源。

1.3.1创建JWT示例

使用Python的PyJWT库创建JWT:

importjwt

importdatetime

#定义密钥

secret_key=my_secret_key

#定义载荷

payload={

sub:1234567890,

name:JohnDoe,

iat:datetime.datetime.utcnow(),

exp:datetime.datetime.utcnow()+datetime.timedelta(minutes=30)

}

#创建JWT

token=jwt.encode(payload,secret_key,algorithm=HS256)

print(token)

1.3.2验证JWT示例

使用Python的PyJWT库验证JWT:

importjwt

#定义密钥

secret_key=my_secret_key

#接收JWT

token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE1MTYyMzkwMjJ9.0pP1f1QnU1cQsJtGv7z0xJ0s0v7z0xJ0sJtGv7z0xJ0

#验证JWT

try:

decoded_token=jwt.decode(token,secret_key,algorithms=[HS256])

print(decoded_token)

exceptjwt.ExpiredSignatureError:

print(Token已过期)

exceptjwt.InvalidTokenError:

print(Token无效)

以上示例展示了如何使用Python的PyJWT库创建和验证JWT。创建JWT时,我们定义了载荷中的声明,并使用密钥和算法进行了签名。验证JWT时,我们检查了JWT的签名和声明的有效性。

2创建JWT

2.1选择合适的库

在创建JWT(JSONWebTokens)时,选择一个合适的库是至关重要的。库的选择应基于你的开发环境和语言。例如,在Node.js环境中,jsonwebtoken是一个广泛使用的库

文档评论(0)

1亿VIP精品文档

相关文档