認証/認可

Strix Cloudではトークンによる認証/認可をサポートしています。

Strix Cloudのゲームサーバーはトークンを使って他の認証サーバーに問い合わせることで、ユーザーのパスワードなどの重要な情報を知ることなく認証を行うことができます。

認証には独自のトークンやOAuth2、OpenID Connectなどを利用することができます。

認証/認可処理の流れ

認証/認可を行う流れは次の図のようになります。クライアントアプリケーション、Strix Cloudゲームサーバー、外部Web APIサーバーの3つが連携することで認可処理が行われます。

このうち、Web APIサーバーの部分を用意して頂く必要があります。

sequenceDiagram participant Client participant Strix Server participant Web APIサーバー Note over Client,Web APIサーバー: 認証 (HTTPS) Client ->> Web APIサーバー: ログインAPI Client ->> Web APIサーバー: アクセストークン取得API Web APIサーバー -->> Client: アクセストークン Note over Client,Web APIサーバー: 認可 (HTTPS) Client ->> Strix Server: アクセストークン Strix Server ->> Web APIサーバー: ユーザー情報取得リクエストAPI Web APIサーバー -->> Strix Server: ユーザー情報 Strix Server ->> Strix Server: セッション作成 Strix Server -->> Client: セッションID, パスワード, ノンス Note over Client,Strix Server: Strix プロトコル通信 Client ->> Strix Server: セッションID, パスワードハッシュ送信 Strix Server ->> Strix Server: セッションID に紐づくセッション取得 Strix Server ->> Strix Server: パスワードハッシュ比較 Strix Server -->> Client: ログイン結果

上図のように次のWeb APIを用意してください。

  • ログインAPI

  • トークン取得API

  • ユーザー情報取得API

ログインAPI

ログインAPIはHTTPS通信での認証を行うためのものです。認証方法はどのような方法でも構いませんので、ID・パスワード認証やUUIDでの認証など好きな方法でログイン処理を作成します。

トークン取得API

トークン取得APIはStrix認証用のアクセストークンを発行するためのAPIです。ログイン済みかどうかをチェックし、レスポンスとしてトークンを返すようにします。

要求

curl -X POST https://<Base URL>/api/access_token

応答

{
    "access_token": "jERkHgIcAfe9xpSpqHUVxBuvLQTV77cO"
}

ユーザー情報取得API

ユーザー情報取得APIはトークンに紐づくユーザーの情報を返すAPIです。このAPIはStrix Cloudのゲームサーバー側からユーザー情報を取得するためにアクセスされます。

これはPOSTリクエストのAPIである必要があります。また、Authorizationヘッダーに「Bearer <アクセストークン>」という形式でアクセストークンが含まれていますのでアクセストークンの部分を取り出し、そのアクセストークンに紐づくユーザー情報をレスポンスで返してください。

要求

curl -X POST -H 'Authorization: Bearer jERkHgIcAfe9xpSpqHUVxBuvLQTV77cO' https://<Base URL>/api/user

応答

{
    "id": 123,       // ユーザーID
    "name": "Alice"  // ユーザー名
}

ユーザー情報はidとnameを返す必要があります。

Strix Cloudオプション設定

まずStrix Cloudのオプション画面から認証/認可のオプションを有効にします。

Authorization enabled and related settings.

まずWeb APIを用意します。トークンを返すAPIと、ユーザー情報を返すAPIを用意します。

ユーザーリソース取得API URLのところには、WebサーバーのURLを指定してください。

{
    "id": 123,
    "name": "Alice"
}

StrixNetwork.authorizationAccessTokenにトークンを設定するStrixNetwork.ConnectMasterServerを呼ぶ

JoinRoomを使う場合はRoomJoinArgs.authUrlに認証URLをセットする

authUrlStrixNetwork.SearchRoomのコールバックイベントに含まれており、roomInfo.nodeProperties["authUrl"]から取得することができます

string authUrl = "";

if (roomInfo.nodeProperties != null && roomInfo.nodeProperties.TryGetValue("authUrl", out object authUrlValue)) {
    authUrl = authUrlValue.ToString();
}

RoomJoinArgs joinArgs = new RoomJoinArgs {
    host = roomInfo.host,
    port = roomInfo.port,
    protocol = roomInfo.protocol,
    roomId = roomInfo.roomId,
    authUrl = authUrl,
    memberProperties = memberProperties
};

StrixNetwork.instance.JoinRoom(joinArgs, handler, failureHandler, config);