認証/認可

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

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

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

認証/認可処理の流れ

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

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

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

上図のように次の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);