API开发:JWT:JWT的加密算法介绍.docxVIP

  • 2
  • 0
  • 约1.15万字
  • 约 13页
  • 2025-08-03 发布于辽宁
  • 举报

PAGE1

PAGE1

API开发:JWT:JWT的加密算法介绍

1JWT基础概念

1.1JWT结构解析

JWT(JSONWebToken)是一种用于两个实体之间安全传输信息的开放标准(RFC7519)。它是一种自包含的令牌,意味着所有必要的信息都存储在令牌中,无需查询数据库或其他外部服务来验证其有效性。JWT由三部分组成,用点(.)分隔:头部(Header)、负载(Payload)和签名(Signature)。

1.1.1头部(Header)

头部包含令牌的类型和签名算法。通常,JWT使用typ:JWT来声明令牌类型,并使用alg字段来指定签名算法,如HMACSHA256或RSA。

{

alg:HS256,

typ:JWT

}

1.1.2负载(Payload)

负载是存储在JWT中的实际数据。它包含一系列声明(Claims),这些声明可以是标准的(如exp、nbf、iat等),也可以是自定义的。例如:

{

sub:1234567890,

name:JohnDoe,

iat:1516239022

}

1.1.3签名(Signature)

签名部分用于确保JWT在传输过程中未被篡改。它使用头部中指定的算法和一个密钥(共享密钥或公钥)来生成。例如,使用HMACSHA256算法:

importjwt

importdatetime

#定义密钥

secret_key=my_secret_key

#创建负载

payload={

sub:1234567890,

name:JohnDoe,

iat:datetime.datetime.utcnow()

}

#生成JWT

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

print(encoded_jwt)

1.2JWT工作流程

JWT的工作流程涉及三个主要参与者:客户端、授权服务器和资源服务器。

客户端请求访问令牌:客户端向授权服务器发送请求,通常需要提供一些认证信息,如用户名和密码。

授权服务器验证并返回令牌:授权服务器验证客户端提供的信息后,生成一个JWT并返回给客户端。

客户端使用令牌访问资源:客户端在后续请求中将JWT作为身份验证的一部分发送给资源服务器。

资源服务器验证令牌:资源服务器使用与授权服务器相同的密钥或公钥来验证JWT的签名,确保其未被篡改,并检查其有效性(如过期时间)。

资源服务器响应请求:如果JWT有效,资源服务器将处理请求并返回响应。

1.2.1示例:JWT在API中的使用

假设我们有一个API,客户端需要通过JWT进行身份验证。以下是一个使用Python和Flask框架创建的简单API示例:

fromflaskimportFlask,request,jsonify

importjwt

importdatetime

app=Flask(__name__)

secret_key=my_secret_key

#模拟的用户数据库

users={

john:password123

}

@app.route(/login,methods=[POST])

deflogin():

username=request.form.get(username)

password=request.form.get(password)

ifusernameinusersandusers[username]==password:

payload={

sub:username,

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

}

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

returnjsonify({token:token})

returnjsonify({error:Invalidcredentials}),401

@app.route(/protected,methods=[GET])

defprotected():

token=request.headers.get(Authorization)

iftoken:

try:

payload=j

文档评论(0)

1亿VIP精品文档

相关文档