Techioz Blog

App Store Connect API用のJWTでRubyファイルを扱う方法

概要

jwt に署名するのに苦労していますが、WWDC で Apple が提供する Ruby ファイルに慣れていません。コードは次のようになります。

require "base64"
require "jwt"

ISSUER_ID = "your-ID"
KEY_ID = "your-KeyID"

private_key = OpenSSL::PKey.read(File.read())

token = JWT.encode(
   {
    iss: ISSUER_ID,
    exp: Time.now.to_i + 20 * 60,
    aud: "appstoreconnect-v1"
   },
   private_key,
   "ES256",
   header_fields={
     kid: KEY_ID }
 )
puts token

ターミナルでコードを実行すると、このエラーが表示され続けます。

私の目標は単純です。GET API からデータを返したいだけですが、ポストマンの 401 エラーに苦労しています。

解決策

投稿したスクリーンショットによると、コードに構文エラーがあります。

コード サンプルには、エラーまたは構成ミスと思われるものもあります。

Ruby で JWT をエンコード/デコードするために最も頻繁に使用される gem はここにあります。これは、例で使用している gem です (require “jwt” 経由)。そのページには参照できる例が多数ありますが、README をよく読んでみると、kid のみを使用できると記載されていることがわかります。 RSA を使用していますが、この例では RSA を使用していません。

これを試して:

token = JWT.encode(
   {
    iss: ISSUER_ID,
    exp: Time.now.to_i + 20 * 60,
    aud: "appstoreconnect-v1"
   },
   private_key,
   "ES256"
)

これは、子供と RSA アルゴリズムで JWK を使用するためのリンクです。

ES256 の例については、同じページで ecdsa_key を検索してください (上で投稿したものが見つかります)。

WWDC ドキュメントの元の例を見ると、正しい構成に関する追加のコンテキストが得られるかもしれませんが、そのドキュメントがどこにあるのかわかりません。公開されており、リンクしていただければフォローアップさせていただきます。