python - Python手动创建没有库的jwt令牌
问题描述
我想手动生成 jwt 令牌,而不需要 python 中的任何库。我为此搜索了详细信息或教程,但我不能。python 中有关 jwt 的所有信息都包含在库中。是否有任何资源可以让我在 python 中生成 jwt 令牌?
解决方案
我遇到了这个 SO 线程,因为我想在不使用 JWT 库的情况下为 Zoom 创建 JWT。按照 darth baba 的建议,我通过 PyJWT 源代码使用默认库重新创建了实现。希望这对将来的其他一些人有所帮助:
import base64
import json
import hmac
import hashlib
from datetime import datetime, timedelta
api_key = 'XXXXXX'
api_sec = 'XXXXXX'
due_date = datetime.now() + timedelta(minutes=10)
expiry = int(due_date.timestamp())
def base64url_encode(input: bytes):
return base64.urlsafe_b64encode(input).decode('utf-8').replace('=','')
def jwt(api_key, expiry, api_sec):
segments = []
header = {"typ": "JWT", "alg": "HS256"}
payload = {"iss": api_key, "exp": expiry}
json_header = json.dumps(header, separators=(",",":")).encode()
json_payload = json.dumps(payload, separators=(",",":")).encode()
segments.append(base64url_encode(json_header))
segments.append(base64url_encode(json_payload))
signing_input = ".".join(segments).encode()
key = api_sec.encode()
signature = hmac.new(key, signing_input, hashlib.sha256).digest()
segments.append(base64url_encode(signature))
encoded_string = ".".join(segments)
return encoded_string
推荐阅读
- python - 如何为这个硒的 HTML 代码找到一个元素?
- cloud - 在云中的 Rundeck 上运行计划作业
- prolog - 在 Prolog 中排除偶数
- php - 在 PHP/Mysql 中,如何在更改存储在配置文件中的 salt 值后访问数据库中的加密数据?
- azure-ad-b2c - 使用 SAML2 B2C 自定义策略的查询字符串声明解析器
- android - Kotlin 无法两次访问片段中的项目
- .net-core - 为什么 .NET Core 在 Mac 上不断重定向?
- android - 任务 ':expo-permissions:compileDebugKotlin' 执行失败
- xaml - 我们可以在 xamarin.forms 中制作可滚动的底部标签页吗
- sql-server - 在用户定义的函数中显示 sql 查询的结果