> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# サービス間認証用のユーザー Store ID を要求する

> Microsoft Store サービス API を使用したサービス間認証用のユーザー Store ID を取得するために必要な構成と手順について説明します。

この記事では、Microsoft Store のサービス間認証用のユーザー Store ID を取得するためのセットアップと手順について説明します。

ユーザー Store ID は、特定のユーザーの代わりに Microsoft Store API へのサービス呼び出しを認証します。XBOX コンソール上のこの ID は、`XUser` オブジェクトのアカウントに紐付けられます。PC 上では、この ID は Microsoft Store アプリにサインインし購入に使用されているアカウントに紐付けられます。

<Note>
  PC では、Microsoft Store アプリと XBOX Live にサインインしゲームをプレイしているアカウント間で、アカウントの ID が異なる場合があります。
</Note>

プレイ アカウントと購入アカウントがどのように異なる場合があるかの詳細については、[PC 上での Store アカウントが一致しないシナリオの処理](/publishing/xstore-commerce/xstore-mismatched-accounts)を参照してください。

ユーザー Store ID キーには 2 種類あります。

1. Microsoft Store Collections サービスで認証する [User Collections ID](#to-create-a-user-collections-id-key-for-the-microsoft-store-collections-service)
2. Microsoft Store Purchase サービスで認証する [User Purchase ID](#to-create-a-user-purchase-id-key-for-the-microsoft-store-purchase-service)

以下のセクションでは、それぞれのサービスを呼び出すためのユーザー Store ID を取得するプロセスの概要を示します。

1. [Microsoft Entra ID アプリケーションを構成する](#step-1-configure-a-microsoft-entra-id-application)。
2. [Microsoft Entra アプリケーション ID をパートナー センターのクライアント アプリに関連付ける](#step-2-associate-your-microsoft-entra-application-id-with-your-client-app-in-partner-center)。
3. サービスで、発行元 ID を表す [Microsoft Entra ID アクセス トークンを作成する](#step-3-creating-microsoft-entra-id-access-tokens)。
4. ゲームで、ユーザーの ID を表す[ユーザー Store ID キーを作成](#step-4-create-a-user-store-id-key)し、このキーをサービスに返す。
5. [Microsoft Store API へのリクエストを認証する](#step-5-authenticate-calls-to-the-microsoft-store-apis)。
6. 有効期限が切れたら[ユーザー Store ID キーを更新する](/publishing/xstore-commerce/xstore-renew-userstoreid)。

このプロセスには 2 つのソフトウェア コンポーネントが関係します。

* **サービス:** Microsoft Entra アクセス トークンを作成し Store API を呼び出すセキュアなバックエンド。
* **ゲーム:** サインインしているユーザー用にユーザー Store ID キーを作成し、それらをサービスに渡すクライアント。

## Microsoft.StoreServices .NET ライブラリとサンプル

統合を効率化するために、GitHub の Microsoft.StoreServices を使用してください。このライブラリは認証とキーのフローを処理し、Store サービス呼び出しのラッパーを提供します。サンプルには、消費型、返金の照合、およびキー更新のためのエンドツーエンドのパターンが含まれています。

* [Microsoft.StoreServices ライブラリ](https://github.com/microsoft/Microsoft-Store-Services)
* [Microsoft.StoreServices サンプル](https://github.com/microsoft/Microsoft-Store-Services-Sample)

## 手順 1: Microsoft Entra ID アプリケーションを構成する

Microsoft Store API を使用する前に、API を呼び出す際にサービスを識別する Microsoft Entra Web アプリケーションを作成します。登録された Web アプリから、テナント ID、アプリケーション ID、およびシークレット キーを取得し、以降の手順で必要なアクセス トークンを生成します。

<Note>
  Web アプリのテナント ID、アプリケーション ID、およびシークレット キーは、発行元下の複数のゲームや製品にわたって再利用できます。各ゲームで新しいものを作成する必要はありません。
</Note>

1. まだの場合は、[クイックスタート: Microsoft ID プラットフォームにアプリケーションを登録する](https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-integrating-applications)の手順に従って、Microsoft Entra ID に **Web app / API** アプリケーションを登録してください。
   > \[!NOTE] アプリケーションを登録するときは、アプリケーションの種類として **Web app / API** を選択してください。この種類により、アプリケーションのキー (*クライアント シークレット* とも呼ばれる) を取得できます。Microsoft Store API を呼び出すには、後の手順で Microsoft Entra ID からアクセス トークンを要求するときにクライアント シークレットを提供する必要があります。
2. [Azure 管理ポータル](https://portal.azure.com/)で、**Microsoft Entra ID** に移動します。左側のペインでディレクトリ、**\[アプリの登録]**、およびアプリケーションを選択します。
3. 後で使用するために **\[アプリケーション (クライアント) ID]** と **\[ディレクトリ (テナント) ID]** の値をコピーします。
4. 左側のペインの **\[証明書とシークレット]** から新しいクライアント シークレットを作成してコピーします。

## 手順 2: Microsoft Entra アプリケーション ID をパートナー センターのクライアント アプリに関連付ける

1. [パートナー センター](https://partner.microsoft.com/dashboard)にサインインし、ゲームを選択します。
2. **\[サービス]** > **\[製品コレクションおよび購入]** を選択します。使用可能な **\[Client ID]** フィールドの 1 つに Microsoft Entra アプリケーション ID を入力します。
3. **\[保存]** を選択します。
4. ゲームとそのアドオンを Store に再公開します。

<Note>
  アドオン製品は、親ゲームの **\[製品コレクションおよび購入]** ページに保存された Client ID を継承します。ゲーム バンドル製品には、Client ID を追加する必要のある独自の **\[製品コレクションおよび購入]** ページがあります。
</Note>

## 手順 3: Microsoft Entra ID アクセス トークンの作成

すべての API リクエストには、認可ヘッダーにサービス アクセス トークンとして知られる Bearer トークンが必要です。必要なもう 1 つのアクセス トークンは、呼び出すサービスまたは API によって異なります。

<Info>
  Microsoft Entra ID アクセス トークンは、アプリではなくサービスのコンテキスト内でのみ作成してください。クライアント シークレットをアプリに送信すると、漏洩する可能性があります。
</Info>

### 異なるアクセス トークンとオーディエンス URI について

各アクセス トークンは、作成時に使用される異なるオーディエンス URI に関連付けられています。

| アクセス トークンの種類          | オーディエンス URI                                                           | 用途                                                                                       |
| --------------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| サービス アクセス トークン        | `https://onestore.microsoft.com/.default`                             | Store サービス エンドポイントへの Authorization ヘッダーの Bearer トークン                                     |
| Collections アクセス トークン | `https://onestore.microsoft.com/b2b/keys/create/collections/.default` | b2bLicensePreview または publisherQuery を呼び出す User Collections ID (`UserCollectionsId`) の作成 |
| Purchase アクセス トークン    | `https://onestore.microsoft.com/b2b/keys/create/purchase/.default`    | Recurrence やその他の Purchase サービスを呼び出す User Purchase ID (`UserPurchaseId`) の作成              |

<Info>
  `https://onestore.microsoft.com/.default` のオーディエンスを使用するサービス アクセス トークンをクライアントに送信しないでください。サービス内で安全に保管してください。
</Info>

### アクセス トークンの作成

アクセス トークンを作成するには、サービスで OAuth 2.0 API を使用します。[Microsoft ID プラットフォームと OAuth 2.0 クライアント資格情報フロー](https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow)の手順に従って、`https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token` エンドポイントに HTTP POST を送信します。以下の例は、リクエストのサンプルを示しています。

```syntax theme={null}
POST https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded; charset=utf-8

grant_type=client_credentials
&client_id=<your_client_id>
&client_secret=<your_client_secret>
&resource=https://onestore.microsoft.com/.default
```

各トークン リクエスト:

* `client_id` と `client_secret` を [Azure 管理ポータル](https://portal.azure.com/)のアプリ登録の値に設定します。
* 必要なトークン タイプのオーディエンス URI に `resource` を設定します。[異なるアクセス トークンとオーディエンス URI について](#understanding-the-different-access-tokens-and-audience-uris)を参照してください。

既存のアクセス トークンが期限切れになる前または後に、新しいアクセス トークンを作成できます。

アクセス トークンの構造の詳細については、[セキュリティ トークン](https://learn.microsoft.com/en-us/azure/active-directory/develop/security-tokens)を参照してください。

## 手順 4: ユーザー Store ID キーを作成する

リクエスト内でユーザーを識別するために、サービスはユーザー Store ID キーを取得します。**ユーザー Store ID** は、User Collections ID または User Purchase ID のいずれかを指す一般的な用語として使用されます。これらのキー間の唯一の違いは、どの対応するサービスで認証できるかです。

ユーザー Store ID キーは、GDK API を使用してクライアント上で、またはサービス上で生成できます。このセクションでは、GDK API を通じてクライアント上でユーザー Store ID キーを作成することに焦点を当てます。サービス上でユーザー Store ID キーを生成する方法の詳細については、[X-Token または OAuth 2.0 を使用したサービスからのユーザー Store ID の要求](/publishing/xstore-commerce/xstore-requesting-userstoreid-oauth)を参照してください。

ユーザー Store ID キーは、Microsoft Store アプリにサインインしているユーザーを表す JSON Web Token (JWT) です。このキーのクレームの詳細については、[ユーザー Store ID キーのクレーム](#claims-in-a-user-store-id-key)を参照してください。

<Note>
  各ユーザー Store ID キーは 30 日間有効です。サービスは、有効期限が切れる前にキーを更新できます。ユーザーのエンタイトルメントを照会するために継続的なアクセスがサービスに必要な場合は、新しいものを作成するのではなく Microsoft Store ID キーを更新してください。詳細については、[ユーザー Store ID キーを更新する](/publishing/xstore-commerce/xstore-renew-userstoreid)を参照してください。
</Note>

### Microsoft Store Collections サービス用の User Collections ID キーを作成するには

User Collections ID キーを使用すると、ユーザーが所有する製品を照会し、Collections API を使用して消費型製品を管理できます。消費型管理の詳細については、[サービスから消費型製品を管理する](/publishing/xstore-commerce/xstore-managing-consumables)を参照してください。

1. [手順 3](#step-3-creating-microsoft-entra-id-access-tokens) で作成した Collections アクセス トークンをゲームに渡します。
2. ゲームで、[XStoreGetUserCollectionsIdAsync](/reference/system/xstore/xstore_members) を呼び出して User Collections ID キーを取得します。Collections アクセス トークンを `serviceTicket` パラメーターとして渡します。オプションで内部ユーザー識別子を `publisherUserId` として渡します。
3. アプリが User Collections ID キーを正常に作成した後、キーをサービスに返します。

### Microsoft Store Purchase サービス用の User Purchase ID キーを作成するには

User Purchase ID キーを使用すると、ユーザーが所有する製品を照会し、Purchase API を使用して消費型製品を管理できます。消費型管理の詳細については、[サービスから消費型製品を管理する](/publishing/xstore-commerce/xstore-managing-consumables)を参照してください。

1. [手順 3](#step-3-creating-microsoft-entra-id-access-tokens) で作成した Purchase アクセス トークンをゲームに渡します。
2. ゲームで、[XStoreGetUserPurchaseIdAsync](/reference/system/xstore/xstore_members) を呼び出して User Purchase ID キーを取得します。Purchase アクセス トークンを `serviceTicket` パラメーターとして渡します。オプションで内部ユーザー識別子を `publisherUserId` として渡します。
3. アプリが User Purchase ID キーを正常に作成した後、キーをサービスに返します。

## 手順 5: Microsoft Store API への呼び出しを認証する

手順については、[Microsoft Entra ID とユーザー Store ID を使用した認証](/publishing/xstore-commerce/xstore-authenticating-service#authenticating-with-microsoft-entra-id-and-user-store-ids)を参照してください。

## 手順 6: 期限切れのユーザー Store ID キーを更新する

手順については、[ユーザー Store ID キーを更新する](/publishing/xstore-commerce/xstore-renew-userstoreid)を参照してください。

## 追加情報

### ユーザー Store ID キーを作成する図

次の図は、ユーザー Store ID キーを作成するプロセスを示しています。

<img src="https://mintcdn.com/microsoft-4404708b/iADzli99B7EWodAv/images/xstore/b2b-1.png?fit=max&auto=format&n=iADzli99B7EWodAv&q=85&s=36a35f930c664b1ccc2b49b2ec430d9d" alt="ユーザー Store ID キーを作成するプロセスを示す図。左から右へ、サービス、Microsoft Entra ID、アプリ、Windows SDK、Store を表すブロックが並んでいます。番号付きの矢印はサービスから Microsoft Entra ID へ、サービスからアプリへ、アプリから Windows SDK と Store へ、そしてアプリからサービスへのフローを示しています。" width="1021" height="414" data-path="images/xstore/b2b-1.png" />

### ユーザー Store ID キーのクレーム

ユーザー Store ID キーは、製品所有情報にアクセスしたいユーザーの ID を表す JWT です。Base64 でデコードすると、ユーザー Store ID キーには次の表に示すクレームが含まれます。

| パラメーター                                                                   | 型        | 説明                                                                                                                                               |
| ------------------------------------------------------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `iat`                                                                    | `int`    | キーが発行された時刻。エポック時間で表されます。この値を使用してトークンの経過時間を判別します。                                                                                                 |
| `iss`                                                                    | `string` | 発行者を識別します。`aud` クレームと同じ値です。                                                                                                                      |
| `aud`                                                                    | `string` | オーディエンスを識別します。以下のいずれかの値である必要があります: `https://collections.mp.microsoft.com/v6.0/keys` または `https://purchase.mp.microsoft.com/v6.0/keys`。           |
| `exp`                                                                    | `int`    | キーが処理に対して有効でなくなる時刻を識別します (キーの更新を除く)。このクレームの値はエポック時間で表されます。                                                                                       |
| `nbf`                                                                    | `int`    | トークンが処理に対して有効になる時刻を識別します。このクレームの値はエポック時間で表されます。                                                                                                  |
| `http://schemas.microsoft.com/marketplace/2015/08/claims/key/clientId`   | `string` | 開発者を識別するクライアント ID。                                                                                                                               |
| `http://schemas.microsoft.com/marketplace/2015/08/claims/key/payload`    | `string` | Microsoft Store サービスによってのみ使用される情報を含む不透明なペイロード (暗号化され Base64 エンコードされています)。                                                                        |
| `http://schemas.microsoft.com/marketplace/2015/08/claims/key/userId`     | `string` | サービスのコンテキスト内で現在のユーザーを識別するユーザー ID。[ユーザー Store ID キーを作成するために使用するメソッド](#step-4-create-a-user-store-id-key)のオプションの `publisherUserId` パラメーターに渡すのと同じ値。 |
| `http://schemas.microsoft.com/marketplace/2015/08/claims/key/refreshUri` | `string` | キーの更新に使用できる URI。                                                                                                                                 |

以下の例は、デコードされたユーザー Store ID ヘッダーを示しています。

```json theme={null}
{
    "typ":"JWT",
    "alg":"RS256",
    "kid": "36D101AF67A9F61B8017FB96F91EDD4B22F05804",
    "x5t":"agA_pgJ7Twx_Ex2_rEeQ2o5fZ5g"
}
```

JWT 署名と `kid` クレームは、クライアントおよびタイトル サービス内では不透明な値として扱ってください。Store API が署名を検証します。

デコードされたユーザー Store ID クレーム セットの例。

```json theme={null}
{
    "http://schemas.microsoft.com/marketplace/2015/08/claims/key/clientId": "1d577369placeholder7393beef1e13d",
    "http://schemas.microsoft.com/marketplace/2015/08/claims/key/payload": "placeholderytCRzCHSqnfczv3f0343wfSydx7hghfu0snWzMqyoAGy5DSJ5rMSsKoQFAccs1iNlwlGrX+/eIwh/VlUhLrncyP8c18mNAzAGK+lTAd2oiMQWRRAZxPwGrJrwiq2fTq5NOVDnQS9Za6/GdRjeiQrv6c0x+WNKxSQ7LV/uH1x+IEhYVtDu53GiXIwekltwaV6EkQGphYy7tbNsW2GqxgcoLLMUVOsQjI+FYBA3MdQpalV/aFN4UrJDkMWJBnmz3vrxBNGEApLWTS4Bd3cMswXsV9m+VhOEfnv+6PrL2jq8OZFoF3FUUpY8Fet2DfFr6xjZs3CBS1095J2yyNFWKBZxAXXNjn+zkvqqiVRjjkjNajhuaNKJk4MGHfk2rZiMy/aosyaEpCyncdisHVSx/S4JwIuxTnfnlY24vS0OXy7mFiZjjB8qL03cLsBXM4utCyXSIggb90GAx0+EFlVoJD7+ZKlm1M90xO/QSMDlrzFyuqcXXDBOnt7rPynPTrOZLVF+ODI5HhWEqArkVnc5MYnrZD06YEwClmTDkHQcxCvU+XUEvTbEk69qR2sfnuXV4cJRRWseUTfYoGyuxkQ2eWAAI1BXGxYECIaAnWF0W6ThweL5ZZDdadW9Ug5U3fZd4WxiDlB/EZ3aTy8kYXTW4Uo0adTkCmdLibw=",
    "http://schemas.microsoft.com/marketplace/2015/08/claims/key/userId": "infusQplaceholder/SZWoPB4FqLEwHXgZFuMJ6TuTY=",
    "http://schemas.microsoft.com/marketplace/2015/08/claims/key/refreshUri": "https://collections.mp.microsoft.com/v6.0/b2b/keys/renew",
    "iat": 1442395542,
    "iss": "https://collections.mp.microsoft.com/v6.0/keys",
    "aud": "https://collections.mp.microsoft.com/v6.0/keys",
    "exp": 1450171541,
    "nbf": 1442391941
}
```

## リファレンス API ドキュメント

* [XStore (API の内容)](/reference/system/xstore/xstore_members)
  * 関数
    * [XStoreGetUserCollectionsIdAsync](/reference/system/xstore/xstore_members)
    * [XStoreGetUserPurchaseIdAsync](/reference/system/xstore/xstore_members)

## 関連項目

[サービスから製品を管理する](/publishing/xstore-commerce/xstore-authenticating-service)

[Microsoft Store API を使用したサービスの認証](/publishing/xstore-commerce/xstore-authenticating-service)

[X-Token または OAuth 2.0 を使用したサービスからのユーザー Store ID の要求](/publishing/xstore-commerce/xstore-requesting-userstoreid-oauth)

[ユーザー Store ID キーを更新する](/publishing/xstore-commerce/xstore-renew-userstoreid)

[Microsoft.StoreServices ライブラリ](https://github.com/microsoft/Microsoft-Store-Services)

[Microsoft.StoreServices サンプル](https://github.com/microsoft/Microsoft-Store-Services-Sample)


## Related topics

- [Microsoft Store API を使用してサービスを認証する](/ja-jp/publishing/xstore-commerce/xstore-authenticating-service.md)
- [ユーザー Store ID キーを更新する](/ja-jp/publishing/xstore-commerce/xstore-renew-userstoreid.md)
- [X-Token または OAuth 2.0 を使用したユーザー Store ID の要求](/ja-jp/publishing/xstore-commerce/xstore-requesting-userstoreid-oauth.md)
- [GDK コマース システムの概要](/ja-jp/publishing/xstore-commerce/xstore-overview.md)
- [XStoreGetUserCollectionsIdAsync](/ja-jp/reference/system/xstore/functions/xstoregetusercollectionsidasync.md)
