Ecom Web APIs

SDK を使用せずに所有権の検証を実行する RESTful エンドポイント

Epic Games Store
15 分で読める

Epic Online Services (EOS) ではカタログ アイテムのアカウント所有権を検証する方法が複数あります。推奨されるのは、Ecom インターフェース を使って EOS SDK API を使用する方法です。このドキュメントは、RESTful エンドポイントを使用して所有権情報にアクセスすることを推奨しているタイトルやサービスのためのものです。EOS には、所有権検証を直接オンラインで実行するための RESTful サービス エンドポイントがあり、クライアントとサービスとの間で受け渡し可能な所有権トークンを作成して検証します。また、利用資格レコードを列挙して処理する利用資格サービスもあります。

所有権検証に使用する方法はユースケースによって異なります。オンライン方式は、エンドポイントと直接統合することで、ゲーム クライアントまたはゲーム サーバーから使用できます。所有権検証トークン方式では、ゲーム クライアント、ユーザー、利用資格およびシグネチャに関する情報を含むトークンが提供され、ゲーム クライアントまたはその他のサービスがそれを検証することができます。所有権検証を行うサードパーティ製のサービスを統合している場合は、所有権検証トークン チェックを使用して、ユーザーのデータにサービスがアクセスできないようにすることをお勧めします。

所有権チェックはツリー全体を探索して、指定した catalogItemId へのアクセス権をユーザーが持っているかどうかをチェックします。利用資格は特定の取引が発生しているかどうかを確認する際に役立ちます。たとえば、ユーザーがゲームのデラックス版を購入し、それに DLC1 にアクセス可能なシーズンパスが含まれている場合、所有権チェックは TRUE を返しますが、それに対し、利用資格チェックでは DLC1 は含まれません。

アクセス トークンを取得するためには、事前に認証サービスと統合を行う必要があります。認証の情報については、Epic アカウント サービスを開始する を参照してください。

ダイレクトな所有権の検証

ユーザーにアイテム、またはアイテム リストの所有権があるかどうかをチェックするエンドポイント。

https://api.epicgames.dev/epic/ecom/v1/platforms/EPIC/identities/{{currentAccountId}}/ownership?nsCatalogItemId={{sandboxId:catalogItemId}}

このエンドポイントは、'https://api.epicgames.dev/epic/oauth/v1/.well-known/openid-configuration' を使って実装されたコンフィギュレーション SDK 1.5+ または OAuth OpenID Connect exchange を介して取得した認証トークンに適用します。

Bearer 承認を使用して Authorization ヘッダにアクセス トークンを渡す必要があります。

このエンドポイントは以下のクエリ パラメータをサポートします。

パラメータ説明
nsCatalogItemId{{sandboxId:catalogItemId}} の書式で、このパラメータを繰り返すことで、sandboxId と catalogItem の複数の組み合わせをチェックできます。
sandboxIdこのパラメータを使用して、特定のサンドボックスで所有されている catalogItemIds の完全なリストを取得できます。

所有権情報を取得するリクエストの例を以下のスニペットに示します。

GET /epic/ecom/v1/platforms/EPIC/identities/94edb6df476d45199f6be940aa1337c0/ownership HTTP/1.1
Host: api.epicgames.dev
Authorization:Bearer 1fe59d629cda497b9f65dbdbee7d468e
nsCatalogItemId=fn:ff150af93c9a4fb99fee12f5db49fa5b&nsCatalogItemId=fn:94egdb6df476d45199f6be940aa1337c0
[
{
"namespace": "fn",
"itemId":"94egdb6df476d45199f6be940aa1337c0",
"owned": false
},
{
"namespace": "fn",
"itemId": "ff150af93c9a4fb99fee12f5db49fa5b",
"owned": true
}
]

トークン ベースでの所有権の検証

所有権検証トークンは署名付きの JWT で、有効期限は 5 分間です。所有権検証トークンは、RS512 (SHA-512 を使用した RSA PKCS#1 シグネチャ、RSA キー サイズ 2048) を使用して署名されています。

トークン ベースでの所有権検証の実行には 2 つのステップがあります。

  1. 所有権検証トークンのリクエスト

  2. 公開キーを使用したトークンの検証

ゲーム クライアント/サーバーが所有権検証トークンを取得すると、所有権検証を行う必要のある任意の統合サービスにトークンを渡すことができます。トークンを検証する統合サービスは JWT をアンパックして kid (キー ID) を展開します。その後、そのキー ID の公開キーを取得してシグネチャを検証します。

トークンには以下の情報が含まれます。

クレーム説明
jtiこのトークン固有の ID。
subトークンのリクエストに使用されたアカウントのアカウント ID。
clidトークンのリクエストに使用されたクライアントのクライアント ID。
entこのトークンで確認された利用資格所有権の配列。この値が空の場合、そのアカウントはリクエストされた利用資格を持ちません。
iatトークンが発行された時刻を示す UNIX タイムスタンプ。
expトークンの有効期限を示す UNIX タイムスタンプ。

所有権検証トークンをリクエストする

所有権検証トークンをリクエストするために、クライアントは HTTP POST リクエストを所有権トークン エンドポイントに対して発行します。

以下が所有権検証トークンをリクエストするエンドポイントです。

https://api.epicgames.dev/epic/ecom/v1/platforms/\{platform}/identities/\{identityId}/ownershipToken

Bearer 承認を使用して Authorization ヘッダにアクセス トークンを渡す必要があります。

このエンドポイントでは、以下のリクエスト ボディがサポートされます。

注:Content-Type は「application/x-www-form-urlencoded」で、パラメータがリクエスト ボディに含められている必要があります。

パラメータ説明
nsCatalogItemId{{sandboxId:catalogItemId}} の書式で、このパラメータを繰り返すことで、sandboxId と catalogItem の複数の組み合わせをチェックできます。

検証トークンを取得するリクエストの例を以下のスニペットに示します。

POST /epic/ecom/v1/platforms/EPIC/identities/{{currentAccountId}}/ownershipToken HTTP/1.1
Host: api.epicgames.dev
Authorization:Bearer 1fe59d629cda497b9f65dbdbee7d468e
nsCatalogItemId=fn:c204662afac64acd8a2117590be477da
{
"token": "egoc1~eyJraWQiOiJWbWdpMDFoQ2V2dXVEbUtWZFZubXphWnhpT2lBa0dEZWdRQmdDdWc4dkRZIiwiYWxnIjoiUlM1MTIifQ.eyJzdWIiOiI5NGVkYjZkZjQ3NmQ0NTE5OWY2YmU5NDBhYTEzMzdjMCIsImlwIjoiNTAuOTguMjI2LjEwIiwiY2xpZCI6IjI5Y2VlNDJlNzExNzQ2ZTFiYmNhZmI2MjkyOWU0OGZkIiwiZW50IjpbeyJjYXRhbG9nSXRlbUlkIjoiYzIwNDY2MmFmYWM2NGFjZDhhMjExNzU5MGJlNDc3ZGEiLCJvd25lZCI6dHJ1ZSwibmFtZXNwYWNlIjoiY2F0bmlwIn1dLCJleHAiOjE1Njk5Nzg1NjUsImlhdCI6MTU2OTk3ODI2NSwianRpIjoiMzgzN2FjODhlNDJjNDE1OTlmMzI5OTNjMmViYzBhOWQifQ.CX4yEEsZph9qPaVvtpnS0sLe_9YGLic5jIOQhhk3tG88GfNLp10w5y9DbYXocDlMXdEoAsAt-33G1JOPIFzrktrOxpR_FNdQ_ozCbBCF1aTQFTYKtvrbYkpA5AIGHmy_J9jSKMq-jN4TQxoSbR0LnowiWoKp_ntibmx0titFQ0kOYBQMvwwTlLgTzUv55I6VlFl8gMBSEw1_oRIUbdNbdHJO4UwnHTeUbcUUvuAWm13BpI2P39vRjU1xx4t51kUj_yY9ISWFBSGsLgEAhH13Mm1CilaeiPsLanE1sA5B3mRMjq8KcLtkkp8JvlIrgD4e-xo_tnRSLkRyKuU0GoqNKw"
}

egoc1~ は Epic Games Ownership Check を表すプレフィックスです。デコードの際には取り除いてください。

トークンには、base64 でエンコードされた 3 つの JSON オブジェクトがあり、それぞれ JWT のヘッダ、ペイロード、シグネチャに対応しています。詳細については、「JWT のドキュメント」を参照してください。

以下は JWT ヘッダの例です。

{
"kid": "tFC2UIhFpTM_Ea3qcOd_MqQT1cBBm9kFLSDfeJhsRG8",
"alg":"RS512"
}

以下は JWT ボディの例です。

{
"jti" : "a19c3f03edf84c0a9621ee44ff36566f",
"sub" : "d144285abee343df98c4e84572c576bb",
"clid":"44c39619da304266855c9646e1081ab5",
"iat" :1547675438,
"exp" :1547704238,
"ent" : [{
"catalogItemId": "c204662afac64acd8a2117590be477da",
"owned": true,
"namespace": "catnip"
}]
}

所有権検証トークンを検証する

トークンのシグネチャを検証するには、公開キーを取得する必要があります。キーを取得するには、キー ID (JWT 内の kid) が必要です。レスポンスには JSON Web Key (JWK) が含まれ、これを使用して JWT 内のシグネチャを検証できます。

公開キーをリクエストするために、クライアント/サーバーは HTTP リクエストを公開キー エンドポイントに対して発行します。

以下が公開キー エンドポイントです。

https://ecommerceintegration-public-service-ecomprod02.ol.epicgames.com/ecommerceintegration/api/public/publickeys/{kid}.

公開キーを取得するリクエストの例を以下のスニペットに示します。

GET /ecommerceintegration/api/public/publickeys/Vmgi01hCevuuDmKVdVnmzaZxiOiAkGDegQBgCug8vDY HTTP/1.1
Host: ecommerceintegration-public-service-ecomprod02.ol.epicgames.com
{
"kty":"RSA",
"e":"AQAB",
"kid":"Vmgi01hCevuuDmKVdVnmzaZxiOiAkGDegQBgCug8vDY",
"n": "k-LHmLHW5bbiqYLmPxC77ciG4N7IuF1SUOSsnDBLneKH3ZAU9kXRkq5MYjmRjxt8g3HpXmmhi_sHe4_g-VnSrM7jP6ntMiJ5t0d5J9ERkSEUSY4w_LS_YECavTr76GiutV_xPT-9jpHJWdVYqk68tiqR42xPFHEFUkYYsb_t6gONhth85ICnVY8Mjg6F0hFvvaMvOJcDVYfQbdjWY8-mzvIF9DmvyVkWaZSQYBaVuNCNKkSiSnkyCtbrynneayugwW0R-rNP5lEcp8UwXpBnep6sRf8nQEsByCnR91RdRXjuvrCSl7fOxpFX82t2WjWTYEOkOgb6yGc_ft-sJidSIQ"
}

ダイレクトな利用資格の列挙

アカウントのダイレクトな利用資格のリストが必要な場合にチェックするエンドポイント。

https://api.epicgames.dev/epic/ecom/v1/identities/{identityId}/entitlements

所有権のチェックのみが必要な場合は、Epic が推奨する上述の所有権チェック API を使用してください。

Bearer 承認を使用して Authorization ヘッダにアクセス トークンを渡す必要があります。

このエンドポイントは以下のクエリ パラメータをサポートします。

パラメータ説明
sandboxIdゲーム タイトルの名前空間。
entitlementNameオプションです。利用資格の名前。指定されていない場合は、sandboxId 以下の利用資格が返されます。このパラメータを繰り返すことで、複数の利用資格をチェックできます。

ユーザーとサンドボックスの利用資格をすべて取得するリクエストの例を以下のスニペットに示します。

GET /api.epicgames.dev/epic/ecom/v1/identities/94edb6df476d45199f6be940aa1337c0/entitlements HTTP/1.1
Host: api.epicgames.dev
Authorization:Bearer 1fe59d629cda497b9f65dbdbee7d468e
[{
"id":"8894469f1120432095eff043a4529433",
"entitlementName":"942e8a7133464f0ea83179030536505e",
"namespace": "buffalo",
"catalogItemId":"942e8a7133464f0ea83179030536505e",
"accountId":"94edb6df476d45199f6be940aa1337c0",
"identityId":"94edb6df476d45199f6be940aa1337c0",
"entitlementType":"AUDIENCE",
"grantDate":"2019-01-04T21:34:24.826Z",
"consumable": false,
"status":"ACTIVE",
"active": true,
"useCount":0,
"originalUseCount":0,
"entitlementSource":"AppEpicgamesCom",
"platformType":"EPIC",
"created":"2019-01-04T21:34:24.829Z",
"updated":"2019-01-04T21:34:24.829Z",
"groupEntitlement": false
},
{
"id": "e21aa0b339ae4e778971058c9395b2b7",
"entitlementName":"25ed76af7816430cbfc0f5e6d3195d56",
"namespace": "badger",
"catalogItemId":"25ed76af7816430cbfc0f5e6d3195d56",
"identityId":"94edb6df476d45199f6be940aa1337c0",
"entitlementType":"AUDIENCE",
"grantDate":"2019-01-16T04:42:06.270Z",
"consumable": false,
"status":"ACTIVE",
"useCount":0,
"originalUseCount":0,
"entitlementSource":"LauncherWeb",
"platformType":"EPIC",
"created":"2019-01-16T04:42:06.273Z",
"updated":"2019-01-16T04:42:06.273Z",
"groupEntitlement": false,
"country":"CA"
}]

トークン ベースでの利用資格の検証

利用資格検証トークンは、RS512 (SHA-512 を使用した RSA PKCS#1 署名、RSA キー サイズ 2048) を使用して署名された JWT であり、作成後 5 分で有効期限が切れます。

トークン ベースでの所有権検証の実行には 2 つのステップがあります。

  1. 利用資格検証トークンのリクエスト

  2. 公開キーを使用したトークンの検証

ゲーム クライアント/サーバーが利用資格検証トークンを取得すると、所有権検証を行う必要のある任意の統合サービスにトークンを渡すことができます。トークンを検証する統合サービスは JWT をアンパックして kid (キー ID) を展開します。その後、そのキー ID の公開キーを取得してシグネチャを検証します。

トークンには以下の情報が含まれます。

利用資格検証トークン クレーム
jtiこのトークン固有の ID。
subトークンのリクエストに使用されたアカウントのアカウント ID。
clidトークンのリクエストに使用されたクライアントのクライアント ID。
entこのトークンで確認された利用資格の配列。この値が空の場合、そのアカウントはリクエストされた利用資格またはサンドボックス ID の資格を持ちません。
iatトークンが発行された時刻を示す UNIX タイムスタンプ。
expトークンの有効期限を示す UNIX タイムスタンプ。

利用資格検証トークンを要求する

利用資格検証トークンをリクエストするために、クライアントは HTTP POST リクエストを所有権トークン エンドポイントに対して発行します。

利用資格検証トークンをリクエストするエンドポイントは、https://api.epicgames.dev/epic/ecom/v1/platforms/{platform}/identities/{identityId}/entitlementToken です。

Bearer 承認を使用して Authorization ヘッダにアクセス トークンを渡す必要があります。

このエンドポイントでは、以下のリクエスト パラメータがサポートされます。

リクエスト パラメータ
sandboxIdゲーム タイトルの名前空間。
entitlementName(オプション) 利用資格の名前。指定されていない場合は、sandboxId 以下の利用資格が返されます。このパラメータを繰り返すことで、複数の利用資格をチェックできます。

検証トークンを取得するリクエストの例を以下のスニペットに示します。

POST
/epic/ecom/v1/platforms/EPIC/identities/94edb6df476d45199f6be940aa1337c0/entitlementToken HTTP/1.1
Host: api.epicgames.dev
Authorization:Bearer 1fe59d629cda497b9f65dbdbee7d468e
sandboxId=2bd59d629cda497b9f65dbdbee7d443s
{
"token": "egoc1~eyJraWQiOiJ0RkMyVUloRnBUTV9FYTNxY09kX01xUVQxY0JCbTlrRkxTRGZlSmhzUkc4IiwiYWxnIjoiUlM1MTIifQ. eyJqdGkiOiJhMTljM2YwM2VkZjg0YzBhOTYyMWVlNDRmZjM2NTY2ZiIsInN1YiI6ImQxNDQyODVhYmVlMzQzZGY5OGM0ZTg0NTcyYzU3NmJiIiwiY2xpZCI6IjQ0YzM5NjE5ZGEzMDQyNjY4NTVjOTY0NmUxMDgxYWI1IiwiaWF0IjoxNTQ3Njc1NDM4LCJleHAiOjE1NDc3MDQyMzgsImVudCI6W3siaWF0IjoxNTQ3Njc1MDAwLCJuYmYiOjE1NDc2NzkwMDAsInNyYyI6IkVQSUMiLCJucyI6InNuYXBkcmFnb24iLCJpdGVtIjoiMTJmYjdkNTBiYmJhNGQwNTlkNWJhYzJlOGUyNzZkMmYiLCJ0eXBlIjoiRU5USVRMRU1FTlQiLCJuYW1lIjoiNDNlZDI4ZTU3N2FiNGMyYThjZWEyN2Q2YjQ0YmJhMTgiLCJjb25zIjoxLCJ1c2NudCI6MH1dfQ.JHFFCjxmcKQDBGWaas53PsvaqeobK_kLZDgw3Je9Btwx5AzmmnW8TGUQGgr-FdZEkpdP2N_TMYV2UBO91QG1ApvwCYrvW3IYBwtl3_9e3NA1QrNLqw2qxG9X8LPiowh0gRO7rpJJ4BwbrYBwImcyf0KPhmCEKkHI9XiDsZDkoD8"
}

Note: egoc1~ is the prefix to represent Epic Games Ownership Check.デコードの際には取り除いてください。

トークンには、base64 でエンコードされた 3 つの JSON オブジェクトがあり、それぞれ JWT のヘッダ、ペイロード、シグネチャに対応しています。詳細については、JWT ドキュメントを参照してください。

以下は JWT ヘッダの例です。

{
"kid": "tFC2UIhFpTM_Ea3qcOd_MqQT1cBBm9kFLSDfeJhsRG8",
"alg":"RS512"
}

以下は JWT ボディの例です。

{
"jti" : "a19c3f03edf84c0a9621ee44ff36566f",
"sub" : "d144285abee343df98c4e84572c576bb",
"clid":"44c39619da304266855c9646e1081ab5",
"iat" :1547675438,
"exp" :1547704238,
"ent" : [{
"grantDate" :1547375000,
"startDate" :1547375000,
"endDate" : (timestamp, optional),
"platformType" :"EPIC",
"namespace" : "tbd",
"catalogItemId" : "tbd",
"entitlementType" :"AUDIENCE",
"entitlementName" :"43ed28e577ab4c2a8cea27d6b44bba18",
"consumable" : false,
"useCount" :0
}]
}

利用資格検証トークンを検証する

トークンのシグネチャを検証するには、公開キーを取得する必要があります。キーを取得するには、キー ID (JWT 内の kid) が必要です。レスポンスには JWT 内のシグネチャを検証することができる JSON Web Key (JWK) が含まれます。

公開キーをリクエストするために、クライアント/サーバーは HTTP リクエストを公開キー エンドポイントに対して発行します。

公開キー エンドポイントは https://ecommerceintegration-public-service-ecomprod02.ol.epicgames.com/ecommerceintegration/api/public/publickeys/{kid} です。

公開キーを取得するリクエストの例を以下のスニペットに示します。

GET /ecommerceintegration/api/public/publickeys/Vmgi01hCevuuDmKVdVnmzaZxiOiAkGDegQBgCug8vDY HTTP/1.1
Host: ecommerceintegration-public-service-ecomprod02.ol.epicgames.com
{
"kty":"RSA",
"e":"AQAB",
"kid":"Vmgi01hCevuuDmKVdVnmzaZxiOiAkGDegQBgCug8vDY",
"n": "k-LHmLHW5bbiqYLmPxC77ciG4N7IuF1SUOSsnDBLneKH3ZAU9kXRkq5MYjmRjxt8g3HpXmmhi_sHe4_g-VnSrM7jP6ntMiJ5t0d5J9ERkSEUSY4w_LS_YECavTr76GiutV_xPT-9jpHJWdVYqk68tiqR42xPFHEFUkYYsb_t6gONhth85ICnVY8Mjg6F0hFvvaMvOJcDVYfQbdjWY8-mzvIF9DmvyVkWaZSQYBaVuNCNKkSiSnkyCtbrynneayugwW0R-rNP5lEcp8UwXpBnep6sRf8nQEsByCnR91RdRXjuvrCSl7fOxpFX82t2WjWTYEOkOgb6yGc_ft-sJidSIQ"
}

利用資格の引き換え/使用

以下は利用資格の引き換え/使用のためのエンドポイントです。利用資格の引き換えが行われると、利用資格の状態は「非アクティブ」に変更されます。

https://api.epicgames.dev/epic/ecom/v1/identities/{identityId}/entitlements/redeem

Bearer 承認を使用して Authorization ヘッダにアクセス トークンを渡す必要があります。

このエンドポイントでは、以下のリクエスト ボディがサポートされます。

{
"entitlementIds": [
"8894469f1134432095eff043a4529433",
"25ed76af9816430cbfc0f5e6d3195d56"
],
"sandboxId":"8894469f1120432095eff043a4529433"
}

ユーザーとサンドボックスの複数の利用資格を取得するリクエストの例を以下のスニペットに示します。

PUT
/ecom/v1/identities/94edb6df476d45199f6be940aa1337c0/entitlements/redeem
Host: api.epicgames.dev
Authorization:Bearer 1fe59d629cda497b9f65dbdbee7d468e
Content-Type: application/json
Request body:
{
"entitlementIds": [
"8894469f1134432095eff043a4529433",
"25ed76af9816430cbfc0f5e6d3195d56"
],
"sandboxId":"8894469f1120432095eff043a4529433"
}