記事

サブスクリプションオファー用の署名の生成

秘密鍵を使用して、サブスクリプションオファーを検証するための署名を作成します。

概要

サーバに署名を作成する前に、App Store Connectで秘密鍵を生成するための1回限りの設定を完了する必要があります。これについては「サブスクリプションオファーの設定」を参照してください。Appとサーバ間でデータ(署名を含む)を送信する場合は、必ず安全な接続を使ってください。データのセキュリティ保護に関する詳細は、「安全でないネットワーク接続の回避(英語)」を参照してください。

署名を作成するには、プロダクトとオファーを識別するパラメータ、サーバによって生成されるパラメータ、および秘密鍵が必要です。署名を生成するには、必要なパラメータを結合した後、取得される文字列に署名してエンコードします。

パラメータの結合

署名生成の最初のステップで、以下のパラメータが必要です。これらの多くはSKPaymentDiscount(英語)にも指定します。

appBundleID

AppのバンドルIDです。

keyIdentifier

署名の生成に使用する秘密鍵を識別する文字列です。このIDは、App Store Connect「ユーザーとアクセス」>「キー」にアクセスし、生成したサブスクリプションキーの「キーID」列で確認できます。

productIdentifier

サブスクリプションのプロダクトID、productIdentifier(英語)。この値は、Appから提供できます。

offerIdentifier

サブスクリプションの割引ID、identifier(英語)。この値は、Appから提供できます。

applicationUsername

開発者が定義するオプションの文字列値。空の文字列でもかまいません。この値はAppから提供でき、AppはこれをapplicationUsername(英語)で使用できます。

nonce

サーバが定義する一意のUUID値。この値は24時間キャッシュされます。署名で使用されるnonceの文字列表現は、小文字でなければなりません。

timestamp

UNIXエポック時間形式(単位はミリ秒)でサーバが生成するタイムスタンプ。このタイムスタンプにより、オファーが24時間アクティブに維持されます。

不可視の分離文字('\u2063')をパラメータの間にはさみ、以下に示す順でUTF-8文字列に結合します。

appBundleId + '\u2063' + keyIdentifier + '\u2063' + productIdentifier + '\u2063' + offerIdentifier + '\u2063' + applicationUsername + '\u2063' + nonce + '\u2063' + timestamp

結合した文字列に署名する

以下のキーとアルゴリズムを使用して、結合したUTF-8文字列に署名します。

  • UTF-8文字列のkeyIdentifierに対応するPKCS#8秘密鍵(App Store Connectからダウンロード)。

  • SHA-256ハッシュを備えた楕円曲線デジタル署名アルゴリズム(ECDSA)。

この結果、Digital Encoding Rules(DER)形式のバイナリ値、すなわち署名を取得します。

署名をローカルで検証しエンコードする

ローカルで署名を検証し、署名プロセスが意図したとおりに機能することを確認します。テスト対象の秘密鍵から派生する公開鍵を作成できます。この鍵を作成する方法の1つとして、ターミナルから以下のOpenSSLコマンドを実行します。

openssl ec -in {downloaded_private_key} -pubout -out public_key.pem

生成したバイナリ署名をbase64エンコードすると、検証のためにApp Storeに送信する最終的な署名文字列が得られます。署名文字列は次のような外観です。

MEQCIEQlmZRNfYzKBSE8QnhLTIHZZZWCFgZpRqRxHss65KoFAiAJgJKjdrWdkLUOCCjuEx2RmFS7daRzSVZRVZ8RyMyUXg==

リクエストへの応答

安全な接続を介したAppの署名リクエストに応答し、エンコードされた署名文字列、noncetimestamp、およびkeyIdentifierを提供します。購入が失敗した場合でも、ペイロード、署名、およびnonceはそれぞれ1回の購入リクエストでのみ有効です。

Appのリクエストおよび署名の使用方法に関する情報は、「署名を作成する」を参照してください。

関連項目

サブスクリプションオファーの提供

サブスクリプションオファーの設定

App Store Connectでキーを生成し、自動更新サブスクリプションのオファーを設定します。

Appへのサブスクリプションオファーの実装

対象となるサブスクリプション登録者に、自動更新サブスクリプションプロダクトの割引価格を提供します。

Node.jsを使用したサブスクリプションオファー用の署名の生成(英語)

秘密鍵と軽量の暗号ライブラリを使用して、署名を生成します。

class SKPaymentDiscount(英語)

支払いに適用される署名済みの割引。