在 python 中验证和解析 Auth0 JWT 令牌
Validate and parse Auth0 JWT token in python
当有人通过 Auth0 登录我的网站时,我从 Auth0 获得了一个 JWT 令牌。这个令牌告诉我这个人的 UID,并允许我从前端到后端进行 API 调用,在那里我可以验证 JWT 令牌以确保请求来自登录用户。
在 https://jwt.io 上,您可以粘贴任何 JWT 令牌,它会解析它并验证签名。
有谁知道我如何在 python 中做到这一点?
Auth0 没有给我 JWT 令牌的私钥,所以我不能使用 jwt.decode()
。
相反,我需要用它的 public 键以某种方式解析 JWT 令牌,但我不确定如何在 python.
中检索它
这是 JWT 令牌:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImZneF9xWEJVNWt0ZzZXSlNLdTJIdiJ9.eyJuaWNrbmFtZSI6ImpvaG5fbWFyayIsIm5hbWUiOiJqb2huX21hcmtAb3V0bG9vay5jb20iLCJwaWN0dXJlIjoiaHR0cHM6Ly9zLmdyYXZhdGFyLmNvbS9hdmF0YXIvNTMxZmJlZjcxN2I1NzVmYjU3MGJlYzcxNTBlOWQ4MTA_cz00ODAmcj1wZyZkPWh0dHBzJTNBJTJGJTJGY2RuLmF1dGgwLmNvbSUyRmF2YXRhcnMlMkZqby5wbmciLCJ1cGRhdGVkX2F0IjoiMjAyMi0wNC0wNVQxNDoyMzozNy42NTFaIiwiZW1haWwiOiJqb2huX21hcmtAb3V0bG9vay5jb20iLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImlzcyI6Imh0dHBzOi8vZGV2LW44Z2h5a3lvLnVzLmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHw2MTdiZTllMzJhMmYyNjAwNmEzZDlhM2EiLCJhdWQiOiIwUGwwR1F5cFhjNkZEakxhb0JuSjhzOEtNZjVKZ3J4bSIsImlhdCI6MTY0OTE2ODYyMiwiZXhwIjoxNjQ5MjA0NjIyLCJub25jZSI6IlJuTjBmbFoyU0Vkck4wSkhRV1EyY21FMk1rNUpXVlUzTW1jM2RtaHlXVkJWYm5oalowMUNUR1paU3c9PSJ9.NQBQPoEj6wzYzclrQzXAWh124gyg_Nf1UYZR4lAuqHZ-fdFycrBMA0Y0dBSvQ-WI7YZOMAPjCRK0nuxKzj9kMQ0c-3finCgsl411tX5tvaX_Khe116le_eyBV28aQQLjqT0zvLaSgIYaJqcgshQ1bYvJp8UXPf8GkMWCD89pnqYPwexx9nsWjrnikInLY9oSbWYN1zA7DxwhygI_JeQc6Cvu6pl1xq8m_WZaCMSOJS2umyl_7vfA84cDX1Zz8aVWEOMinnbmR48sY79cEiIMplcYJA3QH4yFEawSWbzWnVUcv9VCgCJ7fCbqikF86fz2TrWYrI6eATJoVHOXDNDKwA
当然你不会得到私钥。但私钥仅用于签署令牌。您只需要 public 密钥来验证令牌。
jwt.decode()
函数称为解码,但也验证令牌,这就是为什么需要密钥。
documenation 告诉您在哪里可以使用 public 密钥找到您的 JWKS(JSON Web 密钥集)。
Auth0 exposes a JWKS endpoint for each tenant, which is found at https://YOUR_DOMAIN/.well-known/jwks.json. This endpoint will contain the JWK used to verify all Auth0-issued JWTs for this tenant.
发行者 URL 也被编码在 iss
声明中的令牌中(您可以在 https://jwt.io 上检查您的令牌时看到它):
在你的情况下:
https://dev-n8ghykyo.us.auth0.com/.well-known/jwks.json
然后您可以使用
中显示的代码从该端点检索密钥
当有人通过 Auth0 登录我的网站时,我从 Auth0 获得了一个 JWT 令牌。这个令牌告诉我这个人的 UID,并允许我从前端到后端进行 API 调用,在那里我可以验证 JWT 令牌以确保请求来自登录用户。
在 https://jwt.io 上,您可以粘贴任何 JWT 令牌,它会解析它并验证签名。
有谁知道我如何在 python 中做到这一点?
Auth0 没有给我 JWT 令牌的私钥,所以我不能使用 jwt.decode()
。
相反,我需要用它的 public 键以某种方式解析 JWT 令牌,但我不确定如何在 python.
中检索它这是 JWT 令牌:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImZneF9xWEJVNWt0ZzZXSlNLdTJIdiJ9.eyJuaWNrbmFtZSI6ImpvaG5fbWFyayIsIm5hbWUiOiJqb2huX21hcmtAb3V0bG9vay5jb20iLCJwaWN0dXJlIjoiaHR0cHM6Ly9zLmdyYXZhdGFyLmNvbS9hdmF0YXIvNTMxZmJlZjcxN2I1NzVmYjU3MGJlYzcxNTBlOWQ4MTA_cz00ODAmcj1wZyZkPWh0dHBzJTNBJTJGJTJGY2RuLmF1dGgwLmNvbSUyRmF2YXRhcnMlMkZqby5wbmciLCJ1cGRhdGVkX2F0IjoiMjAyMi0wNC0wNVQxNDoyMzozNy42NTFaIiwiZW1haWwiOiJqb2huX21hcmtAb3V0bG9vay5jb20iLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImlzcyI6Imh0dHBzOi8vZGV2LW44Z2h5a3lvLnVzLmF1dGgwLmNvbS8iLCJzdWIiOiJhdXRoMHw2MTdiZTllMzJhMmYyNjAwNmEzZDlhM2EiLCJhdWQiOiIwUGwwR1F5cFhjNkZEakxhb0JuSjhzOEtNZjVKZ3J4bSIsImlhdCI6MTY0OTE2ODYyMiwiZXhwIjoxNjQ5MjA0NjIyLCJub25jZSI6IlJuTjBmbFoyU0Vkck4wSkhRV1EyY21FMk1rNUpXVlUzTW1jM2RtaHlXVkJWYm5oalowMUNUR1paU3c9PSJ9.NQBQPoEj6wzYzclrQzXAWh124gyg_Nf1UYZR4lAuqHZ-fdFycrBMA0Y0dBSvQ-WI7YZOMAPjCRK0nuxKzj9kMQ0c-3finCgsl411tX5tvaX_Khe116le_eyBV28aQQLjqT0zvLaSgIYaJqcgshQ1bYvJp8UXPf8GkMWCD89pnqYPwexx9nsWjrnikInLY9oSbWYN1zA7DxwhygI_JeQc6Cvu6pl1xq8m_WZaCMSOJS2umyl_7vfA84cDX1Zz8aVWEOMinnbmR48sY79cEiIMplcYJA3QH4yFEawSWbzWnVUcv9VCgCJ7fCbqikF86fz2TrWYrI6eATJoVHOXDNDKwA
当然你不会得到私钥。但私钥仅用于签署令牌。您只需要 public 密钥来验证令牌。
jwt.decode()
函数称为解码,但也验证令牌,这就是为什么需要密钥。
documenation 告诉您在哪里可以使用 public 密钥找到您的 JWKS(JSON Web 密钥集)。
Auth0 exposes a JWKS endpoint for each tenant, which is found at https://YOUR_DOMAIN/.well-known/jwks.json. This endpoint will contain the JWK used to verify all Auth0-issued JWTs for this tenant.
发行者 URL 也被编码在 iss
声明中的令牌中(您可以在 https://jwt.io 上检查您的令牌时看到它):
在你的情况下: https://dev-n8ghykyo.us.auth0.com/.well-known/jwks.json
然后您可以使用