概要
SteamworksではSteamユーザーのIDを認証し、アプリケーションの所有権を確認する複数のメソッドを公開しています。 このドキュメントでは、次のシナリオで使用されるそれぞれの認証方法について説明します:
Steam内でのユーザーの識別
すべてのSteamユーザーは、
Steam ID
として知られる64ビットの数値IDで一意に識別できます。 Steamworks C++ APIでは、SteamIDは
CSteamIDオブジェクトに含まれています。 現在のユーザーのSteamIDは
ISteamUser::GetSteamIDを呼び出すことで取得でき、その戻り値に対して
CSteamID.ConvertToUint64()
を呼び出すことで64ビットIDを取得できます。
以下の認証方法を使用すれば、ユーザーのSteam IDを安全に確認できます。
このドキュメントで紹介しているAPI
セッションチケット
セッションチケットは、ユーザーのゲームクライアントとその他複数のゲームクライアント間(ピアツーピアでのマルチプレイヤーセッションなど)、またはゲームクライアントと(
ISteamGameServer APIを使用した)リッスン/専用サーバーとの間で、ユーザーを確認するために使用可能な署名済みチケットです。 チケットは、現在のゲームと関連DLCの所有権の確認だけでなく、ユーザーがVACで禁止されているかどうかの判断にも使用できます(
Valve アンチチート (VAC) とゲーム禁止参照)。
セッションチケットは、
Steamworks Web API を使用してゲームクライアントと安全なバックエンドサーバー間におけるユーザーの確認にも使用できます。 セキュリティで保護されたサーバーが
partner.steam-api.com
へのHTTPSリクエストを実行できることが必要です。
暗号化されたアプリケーションチケット
暗号化されたアプリケーションチケットは、ゲームクライアントと安全なバックエンドサーバー間におけるユーザーの確認に使用できます。 セッションチケットとは異なり、暗号化されたアプリケーションチケットの確認は、セキュリティで保護されたサーバーがHTTPSリクエストを実行できることを必要と
しません。 その代わり、チケットの確認にはセキュリティで保護されたサーバーによるC++ライブラリとプライベートな対称キーが使用されます。 このライブラリのWindowsとLinux用の32ビットと64ビットバージョンはSteamworks SDKの public/steam/lib
ディレクトリの下にあります。暗号化されたアプリケーションチケットを使用する前に、タイトルごとにプライベートキーを作成する必要があります。 作成するには、アプリのランディングページから「Steamworks設定を編集」を開き、「セキュリティ」タブのドロップダウンから「SDK認証」を選択して下さい。 このキーは、タイトルのAppIDとそのタイトルのすべてのDLCに関連付けられます。 Steamworksのこのセクションにアクセスするためには、ユーザーはアプリにおける「署名管理」権限が必要です。
注意:これらのキーは安全に保管し、誤ってアプリケーション内で配布されることがないようにしてください!
Steamworks Web API
Steamは、多数のSteamworks機能にアクセスする際に使用できるHTTPベースのWeb APIを公開しています。 APIは、ゲームクライアントやサーバーなど、HTTPリクエストを作成できるすべてのアプリケーションからアクセス可能なパブリックメソッドを含みます。 同時に、信頼できるバックエンドアプリケーションからのアクセス用に、認証を必要とする保護されたメソッドも含みます。 Web APIの詳細は
こちらを参照して下さい。
P2Pまたはゲームサーバー
セッションチケット
ユーザー認証
以下の手順では、セッションチケットを使用してユーザーのゲームクライアント(クライアントA)と別のクライアントまたはゲームサーバー(クライアントB)の間でユーザーを確認する方法を説明しています。
セッションチケットに関する重要事項
所有権の確認
セッションチケットを使用するとき、Steamは自動で現在のAppIDの所有を確認します。 ユーザーが現在のAppIDを所有していない場合には、
ISteamUser::ValidateAuthTicketResponse_tの
m_eAuthSessionResponse
フィールドが
k_EAuthSessionResponseNoLicenseOrExpiredに設定されます。 ユーザーのセッションチケットを取得して
ISteamUser::BeginAuthSessionに渡した後に、
ISteamUser::UserHasLicenseForAppを使用することでユーザーが特定のDLCを持っているかどうかを確認できます。
バックエンドサーバー
セッションチケットとSteamworks Web API
ユーザー認証
以下の手順では、セッションチケットを使用して、ユーザーのゲームクライアントとセキュリティで保護されたサーバー間で、ユーザーを確認する方法を説明しています。
所有権の確認
ユーザーのIDが確認された後、セキュリティで保護されたサーバーは、
ISteamUser/CheckAppOwnershipWeb APIメソッドを使って指定のAppIDをユーザーが所有しているかどうかを確認できます。または、
ISteamUser/GetPublisherAppOwnershipを呼び出して、提供された
パブリッシャーキーに関連付けられているユーザーが所有するAppIDのリストを取得できます。
暗号化されたアプリケーションチケット
ユーザー認証
以下の手順では、暗号化されたアプリケーションチケットを使用して、ユーザーのゲームクライアントとセキュリティで保護されたサーバーの間でユーザーを確認する方法を説明しています。
実装例は、SDK内の
Steamworks APIのサンプルアプリケーション(SpaceWar)プロジェクトを参照してください。 特に
CSpaceWarClient::RetrieveEncryptedAppTicket
と
CSpaceWarClient::OnRequestEncryptedAppTicket
です。
所有権の確認
Steamは、チケットが作成されたAppIDを持つユーザーに対してのみ、暗号化されたアプリケーションチケットを作成します。 暗号化されたアプリケーションチケットの暗号を解読した後、セキュリティで保護されたサーバーは
SteamEncryptedAppTicket::BIsTicketForAppを使ってタイトルのAppIDとチケットのAppIDがマッチすることを確認できます。 サーバーは、ユーザーが指定の
ダウンロードコンテンツ (DLC)を所有するかを判別するのに、
SteamEncryptedAppTicket::BUserOwnsAppInTicketを使うこともできます。
WebブラウザベースのOpenID認証
Steamは、OpenID 2.0仕様書で記述されている
OpenIDのプロバイダーです。 Webブラウザ内で、サードパーティーWebサイトはOpenIDの使用によってユーザーのSteamIDを取得できます。SteamIDはサードパーティーのWebサイトのログイン資格情報としての使用や、そのWebサイトの既存のアカウントへのリンク付けが可能です。
OpenIDの使用時、ユーザーはブラウザ内でサードパーティーWebサイトから開始します。 ユーザーがそのWebサイトでOpenIDを使用して自分のアカウントにログイン/リンクを希望する場合、サイトはユーザーをSteamコミュニティのWebサイトのログインフォームへ誘導します。 ユーザーがSteamログイン資格情報を入力すると、WebブラウザはリターンURLにOpenID特有のデータを付加してサードパーティーWebサイトにリダイレクトします。 サイトのOpenIDライブラリは、次にこのデータを利用してユーザーのSteamIDを確認し取得することができます。
Steamはログインページにリンクする際に利用できる以下の画像をサードパーティーサイトに提供します:
ユーザー認証
SteamのOpenID 2.0実装を利用して、ユーザーのSteamアカウントをサードパーティーWebサイトのアカウントにリンクすることができます。
OpenID WebサイトからオープンソースのOpenIDライブラリのリストを参照できます。 OpenIDを使用したユーザーIDの確認:
-
https://steamcommunity.com/openid/
をSteamのOPエンドポイントURLとして使用するようにOpenIDライブラリを設定してください。
- ユーザーが認証されると、そのユーザーのClaimed IDにはSteamIDが追加されます。 Steam Claimed IDの形式は :
http://steamcommunity.com/openid/id/<steamid>
です。
所有権の確認
ユーザーのIDが確認された後、セキュリティで保護されたサーバーは
ISteamUser/CheckAppOwnershipWeb APIメソッドを使ってユーザーが指定のAppIDを所有しているかどうかを確認できます。または、
ISteamUser/GetPublisherAppOwnershipを呼び出して、提供された
Web APIパブリッシャーキーに関連付けられているユーザーが所有するAppIDのリストを取得できます。
例
サードパーティーアカウントをSteamアカウントにリンクする
ユーザーのSteamIDをサードパーティーアカウントと関連付けることで、サードパーティーアカウントをSteamアカウントにリンクすることができます。
ユーザーのSteamIDは、ゲーム内またはWebブラウザを通して安全に取得することができ、いったん関連付けが行われるとSteamIDを確認するだけで安全にサードパーティーアカウントへのアクセスを許可できるようになります。 この方法で、Steamユーザーのサードパーティーアカウントシステムへの二次的なログインを行う必要性を排除できます。 さらに、SteamIDが新しく作成される時には、自動的に新しいサードパーティーアカウントを作成してリンクすることができるので、Steamユーザーは二次的な認証が行われていることを意識しないですみます。 ユーザー体験をスムーズにし、新しいゲームをインストールして試すことへの弊害の可能性を取り除きつつ、単一のSteamアカウントでユーザーが所有するゲームへのアクセスを付与できるのです。
ゲーム内からのリンク付け
セッションチケットは、Steamworks Web APIを使ってゲームクライアントと安全なバックエンドサーバー間におけるユーザーのID確認に使用できます。
Webブラウザからリンク付け
SteamはOpenID 2.0仕様をサポートしているため、ユーザーをSteamアカウントでWebサイトから安全にログインさせてSteamIDを取得することができます。 SteamでOpenIDを使用する方法についての詳細は
OpenIDの使用を参照してください。
所有権の確認
ユーザーのIDが確認された後、セキュリティで保護されたサーバーは
ISteamUser/CheckAppOwnershipWeb APIメソッドを使ってユーザーが指定のAppIDを所有しているかどうかを確認できます。または、
ISteamUser/GetPublisherAppOwnershipを呼び出して、提供された
Web APIパブリッシャーキーに関連付けられたユーザーが所有するAppIDのリストを取得できます。
サードパーティーCDキーから ネイティブのSteam所有権チェックへの移行
Steam自体が、タイトルがユーザー認証できる方法を複数提供しており、サードパーティーCDキーの必要性を排除しています。 一般的なCDキーの使用と それぞれの事例においてSteamとネイティブに統合する方法を紹介します。
プライベートフォーラムのアクセス
OpenIDを使用して、ユーザーに直接Steamアカウントでログインしてもらうのがよいでしょう。 OpenIDはユーザーの64ビットのSteamIDを返します。それを
ISteamUser/CheckAppOwnershipで使用すると、ユーザーが指定のAppIDを所有しているかを確認します。 詳細は
サードパーティーアカウントとSteamアカウントのリンクを参照してください。
非SteamゲームのDRM無しビルドをアンロックする
OpenIDと
ISteamUser/CheckAppOwnership(
上記参照)を使うと、自分の
サイト上でコンテンツをアンロックできます。 または、DRM無しのビルドをオプションの無料DLCとしてアップロードできます。
ソフトウェアを自身の運営するWebサイトで販売し、キーを使ってアンロックしている場合
OpenIDを使用して、ユーザーに直接Steamアカウントでログインしてもらうとよいでしょう。 OpenIDはユーザーの64ビットのSteamIDを返します。それを
ISteamUser/CheckAppOwnershipで使用すると、ユーザーが指定のAppIDを所有しているかを確認します。 詳細は上記の
サードパーティーアカウントをSteamアカウントにリンクするを参照してください。
サードパーティーキーの登録に対して、ゲーム内アイテムをドロップする場合
Steamインベントリサービスをご利用の場合、アイテムのitemdefが正しくプロモーションアイテムとして設定され、クライアントから
ISteamInventory::AddPromoItemを呼び出すようにしてください。
ゲームでアイテムバックエンドを用意した場合には、ゲームクライアントから
ISteamUser::GetAuthSessionTicketを呼び出し、ユーザーの所有権を確認するために
ISteamUserAuth/AuthenticateUserTicketと
ISteamUser/CheckAppOwnershipを使用できます。 詳細は
こちらを参照してください。
キーでアンロックされるソフトウェアのバージョンをコントロールする場合
それぞれのゲームのバージョンにAppIDを持つ必要があります。 ゲームクライアントから
ISteamUser::GetAuthSessionTicketを呼び出し、
ISteamUserAuth/AuthenticateUserTicketと
ISteamUser/CheckAppOwnershipを使って所有権を確認します。 詳細は
こちらをを参照してください。