記事


App Store 要求に署名するための JWS の生成


あなたのアプリ内の API 要求を承認するために、あなたのサーバ上に署名済みの JSON Web 署名 (JWS) 文字列を作成します。





概観


JWS は、情報を安全に送信する方法を定義するオープンスタンダード (RFC 7515) です。App Store 機能に固有の情報を使用して、JWS ヘッダとペイロードを作成して下さい。App Store Connect からダウンロードしたプライベート API キーを使用して、あなたのサーバ上で JWS に署名して下さい。


以下の App Store 機能では、StoreKit での呼び出しを承認するために JWS コンパクトシリアルが必要です:


  • Advanced Commerce API アプリ内要求

  • 販売促進オファーの署名

  • お試しオファーの資格

  • JWS を生成するときに署名するデータは、JSON Web Token (JWT) です。JWT には、使用している機能に固有のクレームを含む、claims と呼ばれる名前と値のペアが含まれています。あなたのサーバは JWS コンパクトシリアル をあなたのアプリに返します。あなたのアプリは、関連する StoreKit API 呼び出しで JWS を使用します。


    ヒント

    App Store サーバライブラリには、それぞれの用途に特化した JWS を作成する署名ユーティリティが提供されています。詳細については、App Store サーバー ライブラリを使用して実装を簡素化する を参照してください。

    始めるには、App Store Connect からのキー ID と発行者 ID が必要です。次に、署名済み JWS を生成するために、あなたのサーバ上で以下の手順を実行します:


    1. JWS ヘッダを作成します。

    2. JWS ペイロードを作成します。ペイロードには基本ペイロードクレームが含まれており、機能固有のクレームも必要になる場合があります。

    3. JWS に署名します。


    App Store Connect からキー ID と発行者 ID を取得


    まず、JWS ヘッダのキー ID と JWS ペイロードの発行者 ID が必要です。これらの値を取得するには、App Store Connect にサインインしてください。


    キー ID を取得するには:


    1. [ユーザーとアクセス] を選択し、[キー] タブを選択します。

    2. キー ID の横にカーソルを合わせると、[キー ID のコピー] リンクが表示されます。キー ID は、[アクティブ] 見出しの下の列に表示されます。

    3. [キー ID のコピー] をクリックします。

    API キーが複数ある場合は、JWS の署名に使用する秘密キーのキー ID をコピーします。キーの作成方法については、API 要求を承認するため API キーの作成 を参照してください。


    発行者 ID を取得するには:


    1. [ユーザーとアクセス] を選択し、[キー] タブを選択します。

    2. ページの上部近くに表示される発行者 ID をコピーするには、ID の横にある [コピー] をクリックします。


    JWS ヘッダの作成


    App Store の機能はすべて同じ JWS のヘッダを使用します。


    App Store と通信するための JWS を作成するには、ヘッダで以下のフィールドと値を使用します。


    ヘッダフィールド
    alg - Encryption AlgorithmES256

    ES256 暗号を使用して JWS に署名する必要があります。
    kid - Key IDApp Store Connect からの秘密鍵 ID (例: 2X9R4HXF34)
    typ - Token TypeJWT

    JWS ヘッダの例を以下に示します。


    {
      "alg": "ES256",
      "kid": "2X9R4HXF34",
      "typ": "JWT"
    }
    


    JWS ペイロードの作成


    JWS ペイロードには、発行者 ID や発行時刻など、App Store に固有の基本クレームが含まれています。また、App Store 機能に固有のカスタムクレームも含まれます。以下の表に基本クレームを示します。次のセクションでは、JWS ペイロードにもあなたが含める機能固有のクレームを示します。


    JWS ペイロードには、以下の基本クレームを含めます。


    ペイロード
    フィールド
    iss - 発行者App Store Connect のキーページにあるあなたの発行者 ID(例:"57246542-96fe-1a63-e053-0824d011072a")
    iat - 発行時トークンを発行した UNIX 時間 (秒単位)。App Store サーバはこれを使用して有効期限を計算します (例: 1623085200)。
    aud - 聴取者使用している機能によって異なる値 (下の表を参照)
    bid - バンドル IDアプリのバンドル ID (例: "com.example.testbundleid")
    nonce - Nonceこの要求を識別する 1 回限りの UUID (例: "368f3888-dcd8-11ef-b3c8-325096b39f47")


    使用している機能に合わせて aud 値を選択します。


    機能aud 値
    高度な商取引 API アプリ内要求“advanced-commerce-api"
    販売促進提供署名“promotional-offer"
    お試し提供の資格“introductory-offer-eligibility"


    以下は、機能固有のフィールドのない基本ペイロードの例です。


    {
      "iss": "57246542-96fe-1a63e053-0824d011072a",
      "iat": 1741043663,
      "aud": "promotional-offer",
      "bid": "com.example.testbundleid",
      "nonce": "6584bedf-2ed0-4c01-93ed-c0c64a1670cc"
    }
    


    JWS ペイロードには機能固有のカスタムクレームも必ず含めてください。


    Advanced Commerce API アプリ内要求にカスタムクレームを含める


    Advanced Commerce アプリ内要求のカスタムクレームの場合は、以下の値を使用して下さい。


    ペイロードフィールド
    requestBase64 でコード化された要求データ


    Base64 でコード化された要求データの生成の詳細については、Base64 でコード化された要求データを作成 を参照してください。


    Advanced Commerce API アプリ内要求のペイロードの例を以下に示します。


    {
      "iss": "57246542-96fe-1a63e053-0824d011072a",
      "iat": 1741043663,
      "aud": "advanced-commerce-api",
      "bid": "com.example.testbundleid",
      "nonce": "df2b8374-95a1-425b-a6a5-77a4d7648333",
      "request": "<base64-encoded request data>"
    }
    


    StoreKit で Advanced Commerce API 要求を行う方法の詳細については、あなたのアプリから高度な商業 API 要求を送信する を参照してください。



    販売促進提供の署名にカスタムクレームを含める


    販売促進提供の署名カスタムクレームの場合は、以下の値を使用して下さい。


    ペイロードフィールド
    productId製品の一意の ID (詳細については、id を参照してください)
    offer
    Identifier
    App Store Connect で設定した販売促進提供 ID
    transactionId顧客に属するすべての取引の一意の ID。あなたのアプリ内でアプリ内購入を行っていない顧客に対しても、顧客の appTransactionID を使用できます。このフィールドはオプションですが、推奨されます。


    販売促進提供署名のペイロードの例を以下に示します。


    {
        "iss": "57246542-96fe-1a63e053-0824d011072a",
        "iat": 1741043663,
        "aud": "promotional-offer",
        "bid": "com.example.testbundleid",
        "nonce": "368f3088-dcd5-11ef-b3c8-325096b39f46",
        "productId": "com.example.product",
        "offerIdentifier": "com.example.product.offer",
        "transactionId": "1000011859217"
    }
    


    お試し提供の資格に関するカスタムクレームを含める


    紹介特典の適格性に関するカスタムクレームの場合は、以下の値を使用します。


    ペイロードフィールド
    productId製品の一意の ID (詳細については、id を参照してください)
    allow
    Introductory
    Offer
    顧客が紹介特典の対象かどうかを決定するブール値 (true または false)
    transactionId顧客に属するすべての取引の一意の ID。あなたのアプリ内でアプリ内購入を行っていない顧客に対しても、顧客の appTransactionID を使用できます。


    お試し提供の資格に関するペイロードの例を以下に示します。


    {
      "iss": "57246542-96fe-1a63e053-0824d011072a",
      "iat": 1741043663,
      "aud": "introductory-offer-eligibility",
      "bid": "com.example.testbundleid",
      "nonce": "cfb43594-4f92-4fe2-8b06-d947a848adaa",
      "productId": "com.example.product",
      "allowIntroductoryOffer": false,
      "transactionId": "1000011859217"
    }
    


    購入オプションでお試し提供の適格性の署名された値を提供する方法の詳細については、Product.PurchaseOption を参照してください。



    JWS に署名


    あなたのサーバ上で、ヘッダで指定したキー ID に関連した秘密キーを使用して、ES256 暗号を使用して署名を生成します。署名のプロセスでは、JWS ヘッダと JWS ペイロードが 1 つの署名済み文字列に結合されます。


    JWT トークンの作成と署名には、オンラインで利用できるさまざまなオープンソースライブラリがあります。詳細については、JWT.io を参照してください。JWS を作成するには、App Store Server Library の使用を検討してください。詳細については、App Store サーバー ライブラリを使用して実装を簡素化する を参照してください。


    署名した後は、JWS コンパクトシリアル化形式の文字列が作成されます。その文字列をアプリに送信して下さい。


    注意

    あなたのアプリとサーバ間で署名を含むデータを送信するときは、常に安全な接続を使用してください。あなたのデータのセキュリティを確保する方法の詳細については、安全でないネットワーク接続の防止 (Preventing Insecure Network Connections) を参照してください。




    以下も見よ


    高度な商業 API 操作


    struct AdvancedCommerceProduct

    Advanced Commerce API で使用するために App Store Connect で汎用 SKU として構成された製品。

      Beta  


    あなたのアプリから高度な商業 API 要求を送信する

    あなたのサーバ上で生成した JSON Web 署名 (JWS) を使用して承認した Advanced Commerce API (高度な商業 API) 要求をあなたのアプリから送信します。














    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ