Photon Steam認証
サーバーの設定
- "deploy\NameServer\bin\NameServer.xml.config"を開きます。
- CustomAuthが有効になっていることを確認します。Enabledはtrueである必要があります。
- 必要に応じて、AllowAnonymousをtrueまたはfalseに設定します。
falseに設定することをお勧めします。 - AuthenticationTypeをSteam認証プロバイダータイプのコードである「1」に設定します。
- 任意の名前を選択します。この例では「Steam」を使用しましたが、変更できます。
- 「AuthUrl」は必須なので空のままにしますが、認証エンドポイントは内部にあるため必要ありません。
- その他のSteam固有の必須設定のリストとその説明を以下に示します。
XML
<CustomAuth Enabled="true" AllowAnonymous="false">
<AuthProviders>
<AuthProvider Name="Steam"
AuthenticationType="1"
AuthUrl="">
<CustomAttributes
apiKeySecret="Val1"
appid="Val2"
verifyOwnership="true"
verifyVacBan="true"
verifyPubBan="true" />
</AuthProvider>
</AuthProviders>
</CustomAuth>
- apiKeySecret: SteamパブリッシャーWeb APIのキーです。Steam User Keyと混同しないよう留意してください。取得の方法はこちらを参照してください。
- appid: SteamゲームのID。Steam Directの処理後(旧 Steam Greenlight)にこのIDを取得できます。
- verifyOwnership:
true
またはfalse
の値となります:認証の際に所有権の検証を有効化するかを設定します。
これによって、ユーザーが本当にそのゲームを所有しているか(ゲームを購入し、ライブラリにそのゲームを所有しているか)を検証できます。
有効化されている場合には、この手順はユーザーのセッションチケットを認証後に実行されます。
これを有効化すると、認証が遅延する可能性があります。このため、本当に必要な場合のみ有効化してください。 - verifyVacBan:
true
またはfalse
の値となります: 認証の際にValveのAnti-Cheat (VAC)を使用し、ユーザーが禁止されたか確認を設定できます。
詳細はこちらを参照してください。
これを有効化すると、認証が遅延する可能性があります。このため、本当に必要な場合のみ有効化してください。 - verifyPubBan:
true
またはfalse
の値となります:認証の際にPublisher Banを使用し、ユーザーが禁止されたか確認を設定できます。
詳細はこちらを参照してください。
これを有効化すると、認証が遅延する可能性があります。このため、本当に必要な場合のみ有効化してください。 - version: 1または2の可能性があります(デフォルト値は1です)。バージョンが2に設定されている場合には、セッションチケットの検証にアイデンティティーパラメータが使用されます。アイデンティティーを使用していない場合には、1のままにします。
- identity: バージョンが2に設定されている場合に使用されます。Steamworks SDK 1.57では、アイデンティティーパラメータを必要とするGetAuthTicketForWebAPIが追加されました。任意の文字列識別子(デフォルトは「photon」)を指定できます。
クライアントコード(Unity)
クライアントは、セッションチケットを取得するためにValveのSteamworks APIを使用する必要があります。
このチケットは、そのクライアントが有効なSteamユーザーであることの証明です。
Steamworks.NET
Steamworks.NETは一般的かつ無償のオープンソースSteamworks APIラッパーです。
Steamworks.NETのUnityバージョンをインポートするには、 このページに記載された手順に従ってください。
チケットを取得
C#
// hAuthTicket should be saved so you can use it to cancel the ticket as soon as you are done with it
public string GetSteamAuthTicket(out HAuthTicket hAuthTicket)
{
byte[] ticketByteArray = new byte[1024];
uint ticketSize;
hAuthTicket = SteamUser.GetAuthSessionTicket(ticketByteArray, ticketByteArray.Length, out ticketSize);
System.Array.Resize(ref ticketByteArray, (int)ticketSize);
StringBuilder sb = new StringBuilder();
for(int i=0; i < ticketSize; i++)
{
sb.AppendFormat("{0:x2}", ticketByteArray[i]);
}
return sb.ToString();
}
上記のアイデンティティーパラメータの説明を参照してください。バージョンが2に設定されている場合にはGetAuthSessionTicketではなくGetAuthTicketForWebAPIを使用する必要があります。
チケットを送信
クライアントはユーザーのセッションチケット(16進暗号化UTF-8文字列に変換後)をクエリ文字列キー「チケット」の値として送信する必要があります。
チケットをキャンセル
認証完了後に、チケットをキャンセルまたは無効化することを推奨します。
Facepunch.Steamworks
Facepunch.Steamworksは、もう1つの代替的な無償かつオープンソースのSteamworks API実装です。
Facepunch.Steamworksをインポートするには、このページに記載された手順に従ってください。
チケットを取得
以下のコードでセッションチケットを取得してください。その後、そのチケットを16進暗号化UTF-8文字列に変換します:
C#
// authTicket should be saved so you can use it to cancel the ticket as soon as you are done with it
public string GetSteamAuthTicket(out AuthTicket authTicket)
{
authTicket = SteamUser.GetAuthSessionTicket();
StringBuilder ticketString = new StringBuilder();
for (int i = 0; i < authTicket.Data.Length; i++)
{
ticketString.AppendFormat("{0:x2}", authTicket.Data[i]);
}
return ticketString.ToString();
}
チケットを送信
クライアントはユーザーのセッションチケット(16進暗号化UTF-8文字列に変換後)をクエリ文字列キー「チケット」の値として送信する必要があります。
チケットをキャンセル
認証完了後に、チケットをキャンセルまたは無効化することを推奨します。
Change History
June 20, 2023:
- Added: description for Steam identity usage