什么是JWT?
JWT是一种开放标准(RFC 7519),定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息。它通常用于在网络上的两个系统之间进行身份验证和信息传递。
JWT的结构
一个JWT通常由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。
- 头部(Header)
头部通常包含两部分信息:令牌的类型(”typ”)和所使用的算法(”alg”)。
{
"alg": "HS256",
"typ": "JWT"
}
- 载荷(Payload)
载荷包含了一系列声明,表示要传递的用户信息。
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
这个负载包含了一些声明(claims),包括 “sub”(主题,通常是用户的唯一标识)、”name”(姓名)、”iat”(发布时间,即令牌的创建时间)等。
- 签名(Signature)
签名用于验证发送者的身份,确保令牌在传输过程中没有被篡改。
JWT的生成与验证
假设服务器端使用密钥 “secret” 进行签名,生成JWT的过程如下:
# Base64编码的头部
eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9
# Base64编码的载荷
eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImlhdCI6IDE1MTYyMzkwMjJ9
# HMAC SHA256签名
UJfr8bN4blKnFCD3V2pYxaLZXrsd4dhl6ZlMz1Y9nOM
最终,JWT 就是将编码后的头部、负载和签名用点(.)连接在一起:
eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImlhdCI6IDE1MTYyMzkwMjJ9.UJfr8bN4blKnFCD3V2pYxaLZXrsd4dhl6ZlMz1Y9nOM
客户端收到JWT后,可以通过解码 Base64 部分查看头部和载荷,然后使用密钥验证签名的合法性。
JWT的应用场景
- 身份验证: JWT经常用于身份验证机制,允许用户在不同系统之间无需再次登录。
- 信息传递: JWT可用于在系统之间安全地传递信息,如用户权限、个人信息等。
结语
JWT是一种灵活且安全的标准,广泛应用于现代网络开发中。了解JWT的结构和原理有助于更好地理解和使用这一技术。
以上示例展示了JWT的生成和验证过程,希望对你理解JWT有所帮助!