我正在尝试将 GitHub Apps 示例启动代码从 Ruby 移植到 Python,但是在生成所需的 JWT 时遇到了麻烦。Ruby 脚本看起来像这样,并且工作正常:
require 'openssl'
require 'jwt' # https://rubygems.org/gems/jwt
private_pem = File.read(YOUR_PATH_TO_PEM)
private_key = OpenSSL::PKey::RSA.new(private_pem)
payload = {
iat: Time.now.to_i,
exp: Time.now.to_i + (10 * 60),
iss: GITHUB_APP_IDENTIFIER
}
jwt = JWT.encode(payload, private_key, "RS256")
puts jwt
我的 Python 脚本如下,A JSON web token could not be decoded
在针对 GitHub API 使用时会产生错误:
import os
import time
import jwt
APP_IDENTIFIER = os.environ["GITHUB_APP_IDENTIFIER"]
with open('./PRIVATE_KEY.pem', 'r') as f:
PRIVATE_KEY = f.read()
payload = {"iat": int(time.time()),
"exp": int(time.time()) + (10*60),
"iss": APP_IDENTIFIER}
print(jwt.encode(payload, PRIVATE_KEY, algorithm='RS256'))
当我尝试从两个脚本打印私钥时,我发现 Ruby 版本有一个额外的换行符。我尝试将其添加到 Python 脚本中的私钥中,但它并没有改变输出。
我最好的猜测是差异与OpenSSL::PKey::RSA.new
调用有关,但我不确定这对密钥有什么作用。