> ## 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.

# タイトル サービス向け XBOX services 認証

> pXUID や gamertag などの暗号化された JWT クレームを持つ partner XSTS トークンを使用して、カスタム XBOX Live タイトル Web サービス上でユーザーを認証します。

このトピックでは、カスタム タイトル サービスで XBOX services 認証を使用する方法について説明します。

XSTS トークンは XBOX services だけでなく、カスタム タイトル サービスの認証と認可にも使用できます。カスタム Web サービスは、*partner XSTS トークン* に含まれる XBOX services によって発行されたクレームを使用できます。

partner XSTS トークンは、対象サービス向けに特に定義された一連のクレームを保持します。トークン クレームは XBOX services によって発行および署名されるため、あらゆるゲーム クライアント データよりも大幅に改ざんが困難です。カスタム タイトル サービスは、ユーザー/デバイスの ID と権限を検証するために、XSTS トークン クレームを使用する必要があります。partner XSTS トークンに含まれるクレームの例には、gamertag、プレイヤーの特権、年齢層、およびそのタイトルのパブリッシャー配下でプレイヤーに一意な Partner XUID (pXUID) などがあります。クレームの完全な一覧については、[XBOX services セキュリティ トークン クレーム](/services/xbox-services/fundamentals/s2s-auth-calls/service-authentication/security-tokens/live-token-claims) を参照してください。

XBOX services は、カスタム Web サービスからのみ読み取り可能で、クライアントに対しては不透明となるように partner XSTS トークンを構築します。これを実現するために、トークンは暗号化された JSON Web Token (JWT) であり、RFC 7519 標準に準拠しています。トークンは、秘密鍵および公開鍵を使用した非対称暗号化によって保護されています。この方法により、秘密鍵を持つ Web サービスのみが partner XSTS トークンを復号し、内容を検査できます。

各トークン設定は、Partner Center において *パブリッシャー レベル* で実行および利用可能です。開発者は、トークン名、利用可能なクレーム、暗号化証明書 (鍵)、およびトークンの有効期限を指定します。この設定は特定の *証明書利用者 (Relying Party)* を対象とします。

partner XSTS トークンの使用は、セキュリティを確保するために HTTPS 接続に限定され、Partner Center の **Web サービス エンドポイント** 構成を通じて定義されます。この構成では、partner XSTS トークンと Web サービス URI のペアを指定します。証明書利用者の構成とは異なり、Web サービス エンドポイントは Partner Center で *タイトルごと* に構成されます。

## 証明書利用者 (Relying Party) の構成

カスタム Web サービスを使用するには、タイトルはまず Partner Center でシングル サインオン構成を完了する必要があります。詳細は [証明書利用者の構成](/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/relying-parties/live-relying-parties-nav) を参照してください。

証明書利用者の構成は、*パブリッシャー レベル* かつすべてのサンドボックスにわたって構成されます。可能な限り、同じタイトル サービス (異なるタイトル間) には同じ証明書利用者の構成を使用することがベスト プラクティスです。

## Web サービス エンドポイントの構成

証明書利用者の構成に加えて、タイトル サービスが partner XSTS トークンを使用するには、Partner Center でサービス エンドポイントを構成する必要があります。詳細は [Web サービス](/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/web-services/live-web-services-nav) を参照してください。

Web サービス エンドポイントは、グローバルな `DefaultNsal` 構成において *タイトル レベル* で構成されます。`DefaultNsal` は現行のタイトルで唯一の構成タイプです。以前に構成されたタイトルでは、`CertificationNsal` や `RetailNsal` など、他の環境を反映する他の構成タイプが使用されている場合があります。構成を簡素化するため、これらの構成タイプは新しいタイトルでは利用できません。

### Web サービス SSL 証明書

すべての Web サービス エンドポイントは HTTPS を使用し、信頼された認証局 (CA) によって発行された SSL 証明書を使用する必要があります。これらの証明書は Web サービス エンドポイント構成で指定してはなりません。

開発およびテストでは、タイトルは自己署名の SSL 証明書を使用できますが、信頼されたルート証明書を使用できる場合は推奨されません。
自己署名の SSL 通信は既定では XBOX コンソール上では信頼されません。
証明書が Partner Center のタイトルのシングル サインオン ページの Web サービス エンドポイント定義に追加されていない限り、HTTPS 接続は失敗します。

認識されている CA の一覧については、セキュリティ ドキュメントの [参加者リスト - Microsoft Trusted Root Program](https://aka.ms/trustcertpartners) を参照してください。また、[letsencrypt.org](https://letsencrypt.org) などの組織から、無料で信頼された SSL 証明書を取得することもできます。

## トークン取得と接続フロー

すべてのタイトル サービス エンドポイントは、認証と認可のために partner XSTS トークンを必須とすべきです。この情報がない場合、サービスとの通信は拒否されるべきです。

Web サービスでは、partner XSTS トークンとユーザー識別 (user hash) を要求の `Authentication` ヘッダーに含める必要があります。これらのヘッダーの構造の詳細については、[XBOX services セキュリティ トークン (XSTS トークン)](/services/xbox-services/fundamentals/s2s-auth-calls/service-authentication/security-tokens/live-security-tokens) を参照してください。

セキュアな TCP/UDP サービスでは、partner XSTS トークンとユーザー識別 (user hash) を初回の認可/ハンドシェイク メッセージに含める必要があります。この情報がない場合、サービスとの通信は拒否されるべきです。これらの接続では、サービスのドメインを反映するプレースホルダーを Web サービス エンドポイント URI として指定できます。

## クライアントでの partner XSTS トークンの取得と HTTPS 要求の送信

partner XSTS トークンと署名ヘッダー データは、次のフローで [XUserGetTokenAndSignatureUtf16Async](/reference/system/xuser/functions/xusergettokenandsignatureutf16async) API を通じてゲーム クライアントによって取得されます。

1. 現在のユーザーで `XUserGetTokenAndSignatureUtf16Async` を呼び出します。API 呼び出しにサービスの URL と (該当する場合) カスタム ヘッダーまたはメッセージ本文を含めます。
   API は、対象エンドポイントまたは XBOX service で使用する XSTS トークンとメッセージ署名を取得します。
2. 非同期結果から `XUserGetTokenAndSignatureUtf16Result` を介して XSTS トークンと署名を取得します。
   `XUserGetTokenAndSignatureUtf16Result` は暗号化された XSTS トークンを返します。タイトルは返されたトークンを不透明なデータとして扱う必要があります。トークン データは、次のサービス呼び出しを超えてディスクに書き込んだり、タイトル領域にキャッシュしたりしてはなりません。トークンのキャッシュは `XUserGetTokenAndSignatureUtf16Async` によって行われます。
3. Microsoft Windows HTTP Services (WinHTTP) と XSTS トークンおよび Signature 値を使用して、対象エンドポイントへの HTTPS 要求を作成します。
   すべての HTTPS 呼び出しは WinHTTP API を通じて実行し、XSTS Token 値を `Authentication` ヘッダーに、Signature 値を `Signature` ヘッダーとして追加する必要があります。

セキュアな TCP/UDP サービスでは、次の変更を加えた同じフローが使用されます。

* サービス呼び出しの URL の代わりに、タイトルはサービスのプレースホルダー URI を指定します。
* 認証データは、TCP/UDP 接続の初回認可/ハンドシェイク時に使用されます。

## サーバーでの partner XSTS トークンの処理

partner XSTS トークンがタイトル サービスによって受信された後、サービスはトークンを解析、復号し、トークンの真正性を検証する必要があります。
XSTS トークンの解析と検証の詳細については、[XBOX services セキュリティ トークン (XSTS トークン)](/services/xbox-services/fundamentals/s2s-auth-calls/service-authentication/security-tokens/live-security-tokens) を参照してください。

また、サービス開発者には [Game Service サンプル](https://aka.ms/xgdsamples) と [Xfest 2019 プレゼンテーション XSTS Auth and Server to Server Made Easy](https://forums.xboxlive.com/articles/96129/xfest-online-2019-archive.html) を確認およびテストのために強く推奨します。
このサンプルには、トークン処理を含む完全なサービス ライブラリが含まれています。

### 認証と認可

トークンを解析、復号、および検証した後、サービスはトークンのクレームを信頼できます。
すべての XSTS トークン クレームの一覧については、[XBOX services セキュリティ トークン クレーム](/services/xbox-services/fundamentals/s2s-auth-calls/service-authentication/security-tokens/live-token-claims) を参照してください。
サービスはまず、これらのクレームをサービス レベルの認証と認可に使用する必要があります。
partner XSTS トークンに含まれる情報は常に権威あるものとして扱うべきです。
サービス呼び出しでは、この情報を要求の他の部分で複製する必要はありません。

ユーザー ID には特別な注意が必要です。ユーザー ID は常に XSTS トークン クレームを通じて検証されなければならず、サービス要求のために他のソースからの検証なしに使用してはなりません。認証目的でユーザーを識別するには、タイトル サービスには次の 2 つのオプションがあります。

* **/user/pXUID (ptx)** クレーム。
  アカウント リンク用途のみで ID が必要なシナリオでは、Partner XUID (pXUID) を使用する必要があります。このクレームは、現行のパブリッシャー配下でのユーザーの XBOX services アカウントの一意識別子を公開します。
* **/user/XID** クレーム。
  サービスがユーザー ID を返す必要がある場合、または XBOX services に対してサービス間呼び出しを実行する必要がある場合は、ユーザーの XUID が必要です。そのようなサービスの例としては、カスタムのリーダーボードやマッチメイキング サービス、または XBOX services サービス呼び出しを通じて購入を検証するサービスがあります。

タイトル サービスが partner XSTS トークン内で XUID を有効化し、XUID 情報を保存するには認可が必要です。そのプロセスを進めるには Developer Partner Manager と連携してください。ただし、pXUID の使用には追加のセキュリティ レビューや権限は必要ありません。

gamertag はトークン クレームに含まれていますが、ユーザーの一意識別子として使用してはなりません。gamertag は変更される可能性があるため、一時的な表示やキャッシュ目的のみに使用できます。

認可目的では、*/user/privileges* クレームを通じてユーザーの XBOX services 特権を取得できます。これらの特権は XBOX services で公開される特権と同一であり、サービス アクセスのために検証する必要があります。ユーザーが十分なアクセス権を持たない場合、サービスは HTTP/401 エラー コードを提供する必要があります。

ユーザー ID と特権の検証後、サービスは追加の partner トークン クレームを使用して、ユーザーとデバイスに関する情報を取得し、サービス ロジックに利用できます。

<Note>PXUID は、Partner Center で証明書利用者を作成する際に選択された Business Partner にスコープされます。複数の証明書利用者で x-token を扱う場合、PXUID 値が一致するためには同じ Business Partner を共有する必要があります。Business Partner および証明書利用者の構成の詳細については、[Partner Center での Web サービスのセットアップ](/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/web-services/live-web-services) を参照してください。</Note>

### トークンの有効期限と更新

XSTS トークンは、Partner Center の対応する証明書利用者で構成された特定の期間有効です。
XSTS トークンの既定の有効期限は 4 時間です。
各トークンにはタイムスタンプが含まれており、サービスがトークン クレームを受け入れる前に検証する必要があります。
期限切れのトークンがカスタム サービスに提示された場合、サービスは HTTP/401 エラーを返す必要があります。

クライアント上の [XUserGetTokenAndSignatureUtf16Async](/reference/system/xuser/functions/xusergettokenandsignatureutf16async) が XSTS トークンの有効期限とキャッシュを処理するため、ゲーム サービスに要求を送信する前に毎回呼び出す必要があります。
この API は、タイトルが常に有効なトークンを受信することを保証します。
タイトルはこれ以外の方法でトークンをキャッシュしてはなりません。


## Related topics

- [XBOX services 認証 (目次)](/ja-jp/services/xbox-services/fundamentals/s2s-auth-calls/service-authentication/live-service-authentication-nav.md)
- [XBOX services ユーザー特権の概要](/ja-jp/services/xbox-services/fundamentals/identity/privileges/live-user-privileges-overview.md)
- [サンプル XSTS トークン、復号、および検証](/ja-jp/services/xbox-services/fundamentals/s2s-auth-calls/service-authentication/security-tokens/live-sample-xsts-token.md)
- [XBOX services ユーザー特権のサーバー側での処理](/ja-jp/services/xbox-services/fundamentals/identity/privileges/concepts/live-user-privileges-server.md)
- [XBOX サービス向けツール](/ja-jp/tools/tools-services/live-tools-nav.md)
