Я пытаюсь перенести пример начального кода 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
, но яне уверен, что это делает с ключом.