秘密鍵を使用して、サブスクリプションオファーを検証するための署名を作成します。
概要
サーバに署名を作成する前に、App Store Connectで秘密鍵を生成するための1回限りの設定を完了する必要があります。これについては「サブスクリプションオファーの設定」を参照してください。アプリとサーバ間でデータ(署名を含む)を送信する場合は、必ず安全な接続を使ってください。データのセキュリティ保護に関する詳細は、「安全でないネットワーク接続の回避(英語)」を参照してください。
署名を作成するには、プロダクトとオファーを識別するパラメータ、サーバによって生成されるパラメータ、および秘密鍵が必要です。署名を生成するには、必要なパラメータを結合した後、取得される文字列に署名してエンコードします。
パラメータの結合
署名生成の最初のステップで、以下のパラメータが必要です。これらの多くはSKPaymentDiscount(英語)にも指定します。
- appBundleID
-
アプリのバンドルIDです。
- keyIdentifier
-
署名の生成に使用する秘密鍵を識別する文字列です。このIDは、App Store Connectで「ユーザーとアクセス」>「キー」にアクセスし、生成したサブスクリプションキーの「キーID」列で確認できます。
- productIdentifier
-
サブスクリプションのプロダクトID、productIdentifier(英語)。この値は、アプリから提供できます。
- offerIdentifier
-
サブスクリプションの割引ID、identifier(英語)。この値は、アプリから提供できます。
- applicationUsername
-
開発者が定義するオプションの文字列値。空の文字列でもかまいません。この値はアプリから提供でき、アプリはこれをapplicationUsername(英語)で使用できます。
- nonce
-
サーバが定義する一意のUUID値。この値は24時間キャッシュされます。署名で使用されるnonceの文字列表現は、小文字でなければなりません。
- timestamp
-
UNIXエポック時間形式(単位はミリ秒)でサーバが生成するタイムスタンプ。このタイムスタンプにより、オファーが24時間アクティブに維持されます。
重要
nonceの文字列表現には小文字を使用します。
不可視の分離文字('\u2063')をパラメータの間にはさみ、以下に示す順でUTF-8文字列に結合します。
結合した文字列に署名する
以下のキーとアルゴリズムを使用して、結合したUTF-8文字列に署名します。
-
UTF-8文字列のkeyIdentifierに対応するPKCS#8秘密鍵(App Store Connectからダウンロード)。
-
SHA-256ハッシュを備えた楕円曲線デジタル署名アルゴリズム(ECDSA)。
この結果、Digital Encoding Rules(DER)形式のバイナリ値、すなわち署名を取得します。
署名をローカルで検証しエンコードする
ローカルで署名を検証し、署名プロセスが意図したとおりに機能することを確認します。テスト対象の秘密鍵から派生する公開鍵を作成できます。この鍵を作成する方法の1つとして、ターミナルから以下のOpenSSLコマンドを実行します。
生成したバイナリ署名をbase64エンコードすると、検証のためにApp Storeに送信する最終的な署名文字列が得られます。署名文字列は次のような外観です。
リクエストへの応答
安全な接続を介したアプリの署名リクエストに応答し、エンコードされた署名文字列、nonce、timestamp、およびkeyIdentifierを提供します。購入が失敗した場合でも、ペイロード、署名、およびnonceはそれぞれ1回の購入リクエストでのみ有効です。
アプリのリクエストおよび署名の使用方法に関する情報は、「署名を作成する」を参照してください。