> For the complete documentation index, see [llms.txt](https://docs.ggwp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ggwp.com/jp/ggwp-client-sdk/ren-zheng.md).

# 認証

GGWP SDK では 2 つの認証モードがサポートされています:

| 認証モード  | ユースケース        | セキュリティ | 環境 |
| ------ | ------------- | ------ | -- |
| 静的トークン | 素早いセットアップとテスト | 低      | 開発 |
| 動的トークン | 本番環境へのデプロイ    | 高      | 本番 |

### 静的トークン

静的トークンは、アプリケーション内のさまざまな操作に対して安全なアクセスと署名を有効にするために使用される暗号鍵です。これらのトークンは、認証とデータ整合性のための簡潔な仕組みを提供し、SDK と GGWP Server 間の安全な通信を確保します。

このモードでは、アクセス用と署名用の 2 つの静的トークンが GGWP によって生成され、顧客に直接共有されます。&#x20;

データフローは以下のとおりです:

<figure><img src="/files/afefa793a18a9fa26b15bfb2716390f2e4ddb2d4" alt=""><figcaption></figcaption></figure>

**メリット**

* サーバー側の作業は不要
* セットアップが速い

#### デメリット

* 安全性が低い
* トークンが漏えいした場合、（ゲームにトークン配信用の独自サーバーがあるなら）新しいビルドをリリースする必要があるかもしれません
* すべてのユーザーにデータを送信するために同じトークンが使用されます

### 動的トークン

このモードでは、GGWP SDK による安全な認証とセッション管理のために、アクセス トークンとリフレッシュ トークンが使用されます。アクセス トークンは保護されたリソースへのアクセスに使う短命のトークンであり、リフレッシュ トークンは再認証なしで新しいアクセス トークンを取得するために使う長寿命のトークンです。

このモードでは、Services Server が authcode リクエスト API を構築する必要があり、 [トークン要求を開始します](#auth-code-api) GGWP Server に対して。GGWP SDK は、SDK 初期化プロセス中にこの authcode を必要とします。Game Client は、Game Client と Services Server の間での情報交換向けに設計された既存のセキュリティプロトコルを使用し、自身の services server にこの authcode リクエストを安全に送信することが想定されています。初期化が完了すると、GGWP SDK がアクセス/リフレッシュ トークンの取得と維持を処理します。

データフローは以下のとおりです:

<figure><img src="/files/8639ab3346031a27aa408bb56956fb756404248e" alt=""><figcaption></figcaption></figure>

#### ***メリット***

* トークンは短命で、ユーザーに紐づいています。漏えいした場合でも、被害は限定的かつ短期間にとどまります
* トークンは一時的に安全に保存され、取得は困難です
* リモートで失効できます

#### ***デメリット***

* 動作させるにはサーバー側の作業も必要です

#### 認証コード API

このステップは、Services Server と GGWP Server の間で、 `x-api-key` 認証用のヘッダーです。認証コードが返されます。この認証コードは 5 分間のみ有効で、一時的なアクセス トークンを取得するために交換できます。

**パラメータ**

`ヘッダー`

* x-api-key: あなたの組織とダッシュボードに対応する GGWP API キー。

`ボディ`: 次のフィールドを含む辞書:

* user\_id: ログイン済みプレイヤーまたはユーザーの一意の識別子
* scope: セッションに必要な権限の配列。有効な値は `write:voice`, `write:chat`, `write:reports` および `write:discord`

```bash
curl --request POST "https://client-api.ggwp.com/auth/v1/authorize" \\
  --header 'x-api-key: <API_KEY>' \\
  --data-raw '{
    "user_id": "ユーザーのID",
    "scope": ["write:voice", "write:chat"]
  }'
```

**出力**

* 200 - 正常な操作

```json
{
  "code": "00000000-0000-0000-0000-000000000002.1bea101b-12d2-47c4-9407-0fbae3ab7691"
}
```

* 400
  * Bad Request: リクエストに誤ったデータまたは不正な形式のデータが含まれていることを示します。
* 403
  * **禁止**: サーバーはリクエストを理解したものの、認可を拒否したことを示します。
    * 無効なトークン、user\_id の不一致、または
    * レート制限を超過した場合
* 500
  * **内部サーバーエラー**: サーバーが予期しない状態に遭遇し、リクエストを完了できなかったことを示します。
