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

# タイトル Web サイト向け XBOX services サインイン

> タイトル Web サイト上で Microsoft アカウントの OAuth 2.0 サインインを有効化し、アクセス トークンを XBOX Live ユーザー トークンと交換して、プレイヤー データやプロフィールを読み取ります。

Microsoft アカウント (以前は XBOX services アカウントと呼ばれていた) を使用してユーザーが認証できる Web サイトまたは Web アプリを構築する必要があるさまざまなシナリオがあります。この認証により、リーダーボード、統計、ゲーム クリップ、プロフィールなど、ユーザーの XBOX services データへのアクセス (通常は読み取り専用) が可能になります。

ユーザーの認証を有効にするには、Web サイトまたは Web アプリを最初に Microsoft に登録して、Microsoft アカウント認証用の ID を受け取る必要があります。これは 1 回限りのプロビジョニング手順です。実行時に、Web サイトはまずユーザーが Microsoft アカウントで認証できるようにし、そこから得た資格情報を XBOX services アクセス トークンと交換できるようにします。

XBOX services アクセス トークンは、アカウント リンク目的の情報の取得や、ユーザーに代わって XBOX services にアクセスするために使用できます。次のセクションでは、これらの認証フローについて詳しく説明します。

## 認証の概要

ユーザーの認証を有効にし、XBOX services データへのアクセス認可を取得するプロセスは 3 つのステップで構成されます。最初のステップは 1 回限りのプロビジョニング手順です。

**Web サイトの登録**

* Web サイトまたは Web アプリは、Microsoft アカウントで使用するための ID をプロビジョニングします。
* この登録はパブリッシャーの Microsoft Entra ID で行われます。

このステップが完了したら、Web サイトまたは Web アプリを開発し、実行時に次のステップを実行して XBOX プレイヤー認可と認証を受け取ることができます。

**Microsoft アカウントへのユーザー認証**

1. ユーザーが Web サイトにアクセスするか、アプリを起動します。
2. ユーザーは OAuth2.0 エンドポイント経由で Microsoft アカウントにログインするようにリダイレクトされます。
3. ユーザーは資格情報を正常に入力し、Web サイトまたはアプリが自分に代わって XBOX services 情報にアクセスすることに同意します。
4. Web サイトまたはアプリは認可コードを受け取ります。
5. Web サイトまたはアプリは、認可コードを利用し正しいスコープを要求して、アクセス トークンを要求します。
6. Web サイトまたはアプリはアクセス トークン (および要求した場合はリフレッシュ トークン) を受け取ります。

**XBOX services へのユーザー認証**

7. Web サイトまたはアプリはアクセス トークンを使用して、XBOX services ユーザー トークン (U トークン) を要求します。
8. その後、ユーザー トークンを使用して、XBOX Security Token Service (XSTS) から X トークン (アクセス トークン) を取得し、XBOX services またはタイトル サービスにアクセスします。

## Web サイトの登録

Microsoft アカウントを使用して Web サイトにユーザーを認証できるようにするには、まず Microsoft Entra ID アプリ登録インターフェイスを介して Web サイトまたはアプリを登録する必要があります。

1. Microsoft Entra ID 内でアプリを登録する権限を持つアカウントで Azure Portal にログインします。
2. *"App Registration"* を選択します。
3. *"+ New Registration"* を選択します。
   * このアプリケーションの名前を入力します。
   * *"Supported account types"* では *"Personal Microsoft accounts only"* を選択します。
   * 認証が成功した後、認証フローがユーザーをリダイレクトする先のリダイレクト URL を入力します。後で必要になるのでメモしておいてください。
     後で追加の URI も追加できます。
   * アプリ登録を完了します。
4. Application (client) ID と Directory (tenant) ID をメモしておきます。
5. Certificates & Secrets を選択します。
   * *"+ New Client Secret"* を選択します。
   * 説明を入力します。
   * 有効期限の範囲を選択します。
   * Add をクリックします。
   * 作成されたクライアント シークレット値は後で必要になるのでメモしておいてください。この値はサービス上でのみ安全に使用および保存する必要があります。

## 統合

上記のフローを実装し、登録プロセスで作成された識別子を使用して、次を実装します。

1. 認可コードを要求して OAuth2.0 フローを開始します:
   * ユーザーを次の URL に誘導します: `https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize?client_id=[Application (client) ID from Registration]&response_type=code&redirect_uri=[RedirectUI given during registration]&scope=xboxlive.signin&xboxlive.offline_access`
     この例では、サインイン トークンと、期限切れ後にアクセス トークンをリフレッシュするために使用できるオフライン トークンへのアクセスを要求しています。これにより、正しいアカウント プライバシーおよびアクティビティの通知もユーザーに表示されます。
   * ユーザーが Microsoft アカウントへのログインを完了すると、認可コードが `"code="` に続けて追加されたリダイレクト URI にリダイレクトされます。
   * `xboxlive.offline_access` スコープの使用はオプションで、元のサインイン トークンが期限切れになった後の呼び出しを必要とするシナリオでのみ必要です。この要求では、他の追加スコープを使用できません。

2. 認可コードとアプリケーション登録プロセス中に生成されたクライアント シークレットを使用して Microsoft アカウントのアクセス トークンを引き換えます:
   * 次のプロパティで POST Web 要求を作成します:
     URL: `https://login.microsoftonline.com/consumers/oauth2/v2.0/token`
     Header: `Content-Type: application/x-www-form-urlencoded`
     Body:

```
     client_id=[Application (Client) ID]&code=[Authorization Code received above]&
     redirect_uri=[A redirect UI set in the application]&
     grant_type=authorization_code&client_secret=[Client secret value from application registration]
```

* サービスからの応答には、次の情報を含む JSON 応答が含まれます:
  Token Type: `Bearer`
  Scope: `XboxLive.signin XboxLive.offline_access`
  Expires\_in: `Value`
  Access\_token: `[token value]`
  これはアクセス トークンであり、XBOX services と交換して XBOX ユーザー トークンを取得するために使用します。

3. XBOX 認証エンドポイントを呼び出して XBOX ユーザー トークンを要求し、次の要求を完了することで、Microsoft アカウントのアクセス トークンを XBOX ユーザー トークンと交換できます:
   * 次のプロパティで POST Web 要求を作成します:
     URL: `https://user.auth.xboxlive.com/user/authenticate`
     Header: `x-xbl-contract-version: 1`
     Header: `content-type: application/json`
     Body: 次のデータを含む適切な形式の JSON ペイロード:

```
     {
       "RelyingParty": "http://auth.xboxlive.com",
       "TokenType": "JWT",
       "Properties": {
         "AuthMethod": "RPS",
         "SiteName": "user.auth.xboxlive.com",
         "RpsTicket": "d=[Microsoft Account access token received in the last step]"
       }
     }
```

* サービスからの応答には、XBOX ユーザー トークンを含む次の情報を含む JSON ペイロードが含まれます。次のステップで XBOX ユーザー トークンが必要になります:

```
     {
       "IssueInstant": "2021-06-08T23:45:50.2531302Z",
       "NotAfter": "2021-06-22T23:45:50.2531302Z",
       "Token": "d=[Xbox User Token]",
       "DisplayClaims": {
       "xui": [
           {
             "uhs": "[USER HASH]"
           }
         ]
       }
     }
```

4. その後、ユーザー トークンを X トークンと交換できます。ユーザーに代わってサービス間呼び出しを実行したい場合、および DelegationToken クレームやユーザーの XUID が必要な場合は、独自の証明書利用者に対する X トークンを要求し、通常どおりそのトークンを処理して必要なクレームを抽出できます。

```
   POST https://xsts.auth.xboxlive.com/xsts/authorize HTTP/1.1
   x-xbl-contract-version: 1
   Content-Type: application/json
   Host: xsts.auth.xboxlive.com
   Content-Length: 1425
   Expect: 100-continue
   {
                   "Properties": {
                                   "SandboxId": "XDKS.1",
                                   "UserTokens": ["eyJlbmMiOiJBMTI4Q0JDK0hTMjU2IiwiYWxnIjoiUlN..."]
                   },
                   "RelyingParty": "[Your Relying Party here]",
                   "TokenType": "JWT"
   }
```


## Related topics

- [XBOX services 認証 (目次)](/ja-jp/services/xbox-services/fundamentals/s2s-auth-calls/service-authentication/live-service-authentication-nav.md)
- [XBOX サービス タイトル向け PlayFab インテグレーション](/ja-jp/services/xbox-services/playfab-integration.md)
- [Game Manager へのサインイン](/ja-jp/services/playfab/live-service-management/gamemanager/game-manager-login.md)
- [ユーザーのサインイン](/ja-jp/services/xbox-services/fundamentals/identity/auth/live-authentication-nav.md)
- [シングル サインオン](/ja-jp/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/single-sign-on/index.md)
