在实际应用中,JWT(JSON Web Tokens)常用于身份验证和信息交换。JWT 通常包含三个部分:Header(头部)、Payload(负载)和 Signature(签名)。要从 JWT 中获取 userId,主要的步骤是解析并读取其 Payload 部分。
步骤如下:
-
获取 JWT Token: 首先需要从客户端请求中获取 JWT。通常,JWT 可以通过 HTTP 请求的头部(Authorization 字段)传递。
plaintextAuthorization: Bearer <token>
-
分割 Token: JWT 由三个由点(
.
)分隔的字符串组成。这三部分分别是 Header, Payload 和 Signature。我们需要将这个字符串在每个点处分割,以便独立访问这些部分。pythonheader, payload, signature = token.split('.')
-
解码 Payload: JWT 的 Header 和 Payload 通常使用 Base64Url 编码。为了读取 Payload 中的数据,你需要将其解码。
pythonimport base64 def base64_url_decode(inp): rem = len(inp) % 4 if rem > 0: inp += '=' * (4 - rem) return base64.urlsafe_b64decode(inp) decoded_payload = base64_url_decode(payload)
-
解析 Payload: 解码后的 Payload 是一个 JSON 字符串。需要将此 JSON 字符串解析为一个对象,以便可以从中读取数据。
pythonimport json payload_data = json.loads(decoded_payload)
-
获取 userId: 通常,userId 会作为 Payload 的一部分被存储。具体的键(key)依赖于生成 JWT 的具体实现。常见的键名如
user_id
,userId
,sub
(代表 subject),等等。pythonuser_id = payload_data.get('userId') or payload_data.get('user_id') or payload_data.get('sub')
示例:
如果你有一个 JWT 如下:
plaintexteyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEyMzQ1NiwibmFtZSI6IkphbmUgRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
按上述步骤解码和解析后,你可以从 Payload 中提取出 userId
。