JSON Web Token(JWT,发音为“jot”)是一种紧凑且 URL 安全的方式,用于在两方之间传递 JSON 消息。它是一个定义在 RFC 7519 中的标准。该令牌是一个长字符串,由点分隔成若干部分。每个部分都是 base64 URL 编码的。
令牌包含哪些部分取决于 JWT 的类型:是 JWS(签名令牌)还是 JWE(加密令牌)。如果令牌已签名,它将包含三个部分:头部、负载和签名。如果令牌已加密,它将由五个部分组成:头部、加密密钥、初始化向量、密文(负载)和认证标签。JWT 最常见的用途可能是在 OAuth 和 OpenID Connect 流程中作为访问令牌和 ID 令牌,但它们也可以用于其他目的。
此代码片段提供了一种调整视角,旨在增强 JWT 令牌解码时负载部分的安全性,因为通常存储的键在解码后会以明文形式显示。 此代码片段提供了一种调整视角,旨在增强 JWT 令牌解码时负载部分的安全性。通常,负载部分在从 JWT 令牌(base64)解码后会以明文形式显示。 主要目标是轻量加密或混淆负载值,使其含义难以辨别。目的是确保即使有人尝试解码负载值,也无法轻易做到。
尝试隐藏名为“userid”的键的值的思路如下:
以及..^^
在示例中,键显示为 { 'userid': 'random_value' },
明显表示它是一个用户 ID。
然而,这仅用于说明目的。
实际上,通常会使用一个预先确定且不公开的名称。
例如:'a': 'changing_random_value'
尝试篡改使用此方法生成的 JWT 令牌需要同时访问用于创建 UserID 的 JWT 密钥和异或对称密钥。
# python3 main.py
- Current Unix Timestamp: 1709160368
- Current Unix Timestamp to Human Readable: 2024-02-29 07:46:08
- userid: 23243232
- XOR Symmetric key: b'generally_user_salt_or_hash_or_random_uuid_this_value_must_be_in_dbms'
- JWT Secret key: yes_your_service_jwt_secret_key
- Encoded UserID and Timestamp: VVZcUUFTX14FOkdEUUFpEVZfTWwKEGkLUxUKawtHOkAAW1RXDGYWQAo=
- Decoded UserID and Hashed Timestamp: 23243232|e27436b7393eb6c2fb4d5e2a508a9c5c
- JWT Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aW1lc3RhbXAiOiIyMDI0LTAyLTI5IDA3OjQ2OjA4IiwidXNlcmlkIjoiVlZaY1VVRlRYMTRGT2tkRVVVRnBFVlpmVFd3S0VHa0xVeFVLYXd0SE9rQUFXMVJYREdZV1FBbz0ifQ.bM_6cBZHdXhMZjyefr6YO5n5X51SzXjyBUEzFiBaZ7Q
- Decoded JWT: {'timestamp': '2024-02-29 07:46:08', 'userid': 'VVZcUUFTX14FOkdEUUFpEVZfTWwKEGkLUxUKawtHOkAAW1RXDGYWQAo='}
# run again
- Decoded JWT: {'timestamp': '2024-02-29 08:16:36', 'userid': 'VVZcUUFTX14FaRNAVBRpRQcORmtWRGleVUtRZlYXaBZZCgYOWGlDR10='}
- Decoded JWT: {'timestamp': '2024-02-29 08:16:51', 'userid': 'VVZcUUFTX14FZxMRVUdnEgJZEmxfRztRVUBabAsRZkdVVlJWWztGQVA='}
- Decoded JWT: {'timestamp': '2024-02-29 08:17:01', 'userid': 'VVZcUUFTX14FbxYQUkM8RVRZEmkLRWsNUBYNb1sQPREFDFYKDmYRQV4='}
- Decoded JWT: {'timestamp': '2024-02-29 08:17:09', 'userid': 'VVZcUUFTX14FbUNEVEVqEFlaTGoKQjxZBRULOlpGPUtSClALWD5GRAs='}
