Создание JWT с Ruby для API iTunes Connect - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь сгенерировать токен для подписи моих запросов к API iTunes Connect. Это мой файл Ruby:

require "jwt"
require 'openssl'

ISSUER_ID = "my issuer string"
KEY_ID = "my key id string"

key_file = File.read('my p8 file containing my private key') # Located at the same folder than my ruby file
private_key = OpenSSL::PKey::RSA.new(key_file)

payload = {
      'iss': ISSUER_ID,
      'exp': 1528408800,
      'aud': 'appstoreconnect-v1'
  }

header = {
      'alg': 'ES256',
      'kid': KEY_ID,
      'typ': 'JWT'
  }

  jwt = JWT.encode(payload, private_key, algorithm='ES256', header)
  puts jwt

Если я запускаю этот файл ruby jwt.rb, я получаю следующий вывод:

/ Библиотека / Ruby / Gems / 2.3.0 / gems / jwt-2.1.0 / lib / jwt / algos / ecdsa.rb: 15: в знаке ': неопределенная группа методов' для # (NoMethodError) из /Library/Ruby/Gems/2.3.0/gems/jwt-2.1.0/lib/jwt/signature.rb:35:in sign ' из /Library/Ruby/Gems/2.3.0/gems/jwt-2.1.0/lib/jwt/encode.rb:39:in encoded_signature ' из /Library/Ruby/Gems/2.3.0/gems/jwt-2.1.0/lib/jwt/encode.rb:47:in encode_segments ' из /Library/Ruby/Gems/2.3.0/gems/jwt-2.1.0/lib/jwt/encode.rb:20:in initialize ' из /Library/Ruby/Gems/2.3.0/gems/jwt-2.1.0/lib/jwt.rb:21:in new ' из /Library/Ruby/Gems/2.3.0/gems/jwt-2.1.0/lib/jwt.rb:21:in encode ' от jwt.rb: 22: в '

По выводу на консоль трудно сказать, что не работает, но если бы я использовал RS256 в качестве алгоритма и пропустил заголовок, скрипт успешно сгенерировал бы токен.

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Похоже, это вызвано использованием ключа RSA с алгоритмом шифрования ECDSA. Либо используйте RS256 algo вместо ES256, либо используйте OpenSSL::PKey::EC вместо OpenSSL::PKey::RSA (для этого вам, вероятно, понадобится новый закрытый ключ).

0 голосов
/ 17 апреля 2019

Существует Apnotic гем, который реализует push-уведомления Apple современным Apple:
HTTP2.0 + JWT + p8.

Возможно, вы могли бы найти решение в его ProviderToken class .

...