無所属

ホーム ドキュメントとヘルプ
Steamworks ドキュメンテーション
ユーザー認証と所有権確認

概要

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 を使用してゲームクライアントと安全なバックエンドサーバー間におけるユーザーの確認にも使用できます。 セキュアサーバーが api.steampowered.com への HTTPS リクエストを実行できることが必要です。

暗号化されたアプリケーションチケット

暗号化されたアプリケーションチケットは、ゲームクライアントと安全なバックエンドサーバー間におけるユーザーの確認に使用できます。 セッションチケットとは異なり、暗号化されたアプリケーションチケットの確認は、セキュアサーバーが HTTPS リクエストを実行できることを必要としません。 その代わり、チケットの確認にはセキュアサーバーによる C++ ライブラリととプライベートな対称キーが使用されます。 このライブラリの Windows と Linux 用の 32 ビットと 64 ビットバージョンは Steamworks SDK の public/steam/lib ディレクトリ下にあります。
暗号化されたアプリケーションチケットを使用する前に、それぞれのタイトル毎にプライベートキーを作成する必要があります。 作成には、アプリケーションのランディングページから [Steamworks 設定を編集] を開き、[セキュリティ] タブのドロップダウンから [SDK 認証] を選択して下さい。 このキーは、タイトルの AppID とそのタイトルのすべての DLC に関連付けられます。

注: これらのキーは安全に保存し、何らかの方法でアプリケーション内で配布されることの無いようにしてください!

Steamworks Web API

Steam は、多数の Steamworks 機能にアクセスする際に使用できる HTTP ベースの Web API を公開しています。 API は、ゲームクライアントまたはサーバー等の HTTP リクエストを作成できるすべてのアプリケーションからアクセスできるパブリックメソッドを含みます。 同時に、信頼できるバックエンドアプリケーションからのアクセス用に、認証の必要な保護されたメソッドも含みます。 Web API の詳細は こちらを参照して下さい。

P2P またはゲームサーバー

セッションチケット

ユーザー認証

以下の手順では、セッションチケットを使用してユーザーのゲームクライアント (クライアント A) と別のクライアントまたはゲームサーバー (クライアント B) の間でユーザーの確認する方法を説明しています:
  • クライアント A は、ISteamUser::GetAuthSessionTicketを呼び出してセッションチケットを取得する必要があります。
  • クライアント A はそのセッションチケットをクライアント B に渡す必要があります。
  • クライアント B はクライアント A のチケットを ISteamUser::BeginAuthSessionに渡し、有効性を迅速にチェックします。 チケットが有効な場合には ISteamUser::BeginAuthSession がチケットを Steam バックエンドに転送してチケットが再利用されていないこと、クライアント A の所有者によって発行されたことを確認します。この確認結果は、ISteamUser::ValidateAuthTicketResponse_t コールバックで返されます。
  • マルチプレイヤーセッションの終了時:

セッションチケットに関する重要事項
  • セッションチケットは一度のみ使用可能です。 マルチプレイヤーセッション内のチケットをリクエストする各クライアントに対して、 ISteamUser::GetAuthSessionTicket を呼び出す必要があります。
  • ピアツーピアのマルチプレイヤーセッション内でプレイヤーの認証に使用する場合、各ゲームクライアントはマルチプレイヤーセッション内の自分以外のゲームクライアントの ID を確認する必要があります。
  • セッションチケットの使用が終わるときは、ISteamUser::GetAuthSessionTicket から返されたすべてのハンドルに対して ISteamUser::CancelAuthTicket を呼び出す必要があります。
  • クライアント A が ISteamUser::CancelAuthTicket を呼び出す時、クライアント B はクライアント A のチケットが無効であることを示す ISteamUser::ValidateAuthTicketResponse_t コールバックを受け取ります。
  • クライアント A がクライアント B とのゲームを退出するとき、クライアント A の ISteamUser::CancelAuthTicket 呼び出しがクライアント B の ISteamUser::EndAuthSession 呼び出しよりも前に処理された場合、クライアント B はチケットがキャンセルされたことを示す ISteamUser::ValidateAuthTicketResponse_t コールバックを受け取ります。 クライアント A が退出することに対する相互の合意が存在するため、このコールバックは無視できます。
  • ネットワークの状態によっては、Steam バックエンドが ISteamUser::BeginAuthSession 呼び出し元に対してコールバックを提供できない場合があります。 ISteamUser::BeginAuthSession の呼び出し元 (クライアント B) は、このコールバックを受信するまでクライアント A の ID が確認できたと仮定するべきではありませんが、マルチプレイヤーセッションの継続は許可してください。
  • ISteamUser::BeginAuthSession の呼び出し元が、クライアント A のチケットが無効と示す ISteamUser::ValidateAuthTicketResponse_t コールバックを受け取った場合、 呼び出し元はクライアント A とのマルチプレイヤーセッションの継続を拒否しなければなりません。ゲーム内の他のピアーもクライアント A とのプレイを拒否しない場合でも、呼び出し元はマルチプレイヤーセッションを退出してください。
  • ISteamGameServer はゲームクライアントとゲームサーバー間で認証を行うのと同様のセッションチケットメソッドを公開しています。

所有権の確認

セッションチケットを使用するとき、Steam は自動で現在の AppID の所有を確認します。 ユーザーが現在の AppID を所有していない場合には、ISteamUser::ValidateAuthTicketResponse_tm_eAuthSessionResponse フィールドが k_EAuthSessionResponseNoLicenseOrExpired に設定されます。 ユーザーのセッションチケットを取得して ISteamUser::BeginAuthSession に渡してから、ユーザーが特定の DLC を持っているかどうかを確認するために ISteamUser::UserHasLicenseForApp を使用できます。

バックエンドサーバー

注: このユーザー認証メソッドは Valve アンチチートを利用する予定のゲームでは使用できません。

セッションチケットと Steamworks Web API

ユーザー認証

以下の手順では、セッションチケットを使用してユーザーのゲームクライアントとセキュアサーバーの間でユーザーを確認する方法を説明しています:
  • クライアントは、ISteamUser::GetAuthSessionTicket を呼び出してセッションチケットを取得する必要があります。
  • 有効なチケットを保証するため、クライアントは ISteamUser::GetAuthSessionTicketResponse_t コールバックを待つ必要があります。
  • クライアントはそのセッションチケットをセキュアサーバーに送信する必要があります。
  • セキュアサーバーは api.steampowered.com に HTTPS リクエストを作成してISteamUserAuth/AuthenticateUserTicket Webメソッドを呼び出し、ユーザーのセッションチケットを Hex エンコードされた UTF-8 文字列として送信します。 このメソッドでは、提供されたチケットに対する AppID が関連付けられた Web API パブリッシャーキーが必要になる点にご注意ください。
  • ユーザーのチケットが有効な場合、ISteamUserAuth/AuthenticateUserTicket がユーザーの 64 ビット SteamID を返します。

所有権の確認

ユーザーの ID が確認された後、セキュアサーバーは ISteamUser/CheckAppOwnership Web API メソッドを使ってユーザーが特定の AppID を所有しているかどうかを確認できます。または、ISteamUser/GetPublisherAppOwnership を呼び出して、提供されたパブリッシャーキーに関連付けられているユーザーが所有する AppID のリストを取得できます。

暗号化されたアプリケーションチケット

ユーザー認証

以下の手順では、暗号化されたアプリケーションチケットを使用して、ユーザーのゲームクライアントとセキュアサーバーの間でユーザーを確認する方法を説明しています:

実装例は、SDK 内の Steamworks API Example Application (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 はログインページにリンクする際に利用できる以下の画像をサードパーティーサイトに提供します:
sits_large_border.png

sits_large_noborder.png

sits_small.png

ユーザー認証

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/CheckAppOwnership Web API メソッドを使ってユーザーが特定の AppID を所有しているかどうかを確認できます。または、ISteamUser/GetPublisherAppOwnership を呼び出して、提供されたWeb API パブリッシャーキーに関連付けられているユーザーが所有する AppID のリストを取得できます。

サードパーティアカウントを Steam アカウントにリンクする

サードパーティアカウントは、ユーザーの SteamID をサードパーティアカウントを関連付けることで Steam アカウントにリンクすることができます。

ユーザーの SteamID はゲーム内あるいは Web ブラウザを通して安全に取得することができ、いったん関連付けが行われると SteamID を確認するだけで安全にサードパーティアカウントへのアクセスを許可をできるようになります。 この方法で、Steam ユーザーのサードパーティアカウントシステムへの 2 次的なログインを行う必要性を排除できます。 更に、SteamID が新しく作成された時には自動的に新しいサードパーティアカウントを作成してリンクすることができるので、Steam ユーザーは 2 次的な認証が行われていることを意識しないですみます。 ユーザー体験をスムーズにし、新しいゲームをインストールして試すことへの弊害の可能性を取り除きつつ、単一の Steam アカウントでユーザーが所有するゲームへのアクセスを付与できるのです。

ゲーム内からのリンク付け

セッションチケットは、Steamworks Web API を使ってゲームクライアントとセキュアなバックエンドサーバー間においてユーザーの ID 確認に使用できます。
  • クライアントは、ISteamUser::GetAuthSessionTicket を呼び出してセッションチケットを取得する必要があります。
  • 有効なチケットを保証するため、クライアントは ISteamUser::GetAuthSessionTicketResponse_t コールバックを待つ必要があります。
  • クライアントはそのセッションチケットをセキュアサーバーに送信する必要があります。
  • セキュアサーバーは api.steampowered.com に HTTPS リクエストを作成してISteamUserAuth/AuthenticateUserTicket Web メソッドを呼び出し、ユーザーのセッションチケットを Hex エンコードされた UTF-8 文字列として送信します。 このメソッドでは、提供されたチケットに対する AppID が関連付けられた Web API パブリッシャーキーが必要になる点にご注意ください。
  • ユーザーのチケットが有効な場合、 ISteamUserAuth/AuthenticateUserTicket がユーザーの 64 ビット SteamID を返します。

Web ブラウザからリンク付け

Steam は OpenID 2.0 仕様をサポートしているため、ユーザーを Steam アカウントで Web サイトから安全にログインさせて SteamID を取得することができます。 Steam で OpenID を使用する方法についての詳細は Using OpenID を参照してください。

所有権の確認

ユーザーの ID が確認された後、セキュアサーバーは ISteamUser/CheckAppOwnership Web 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/AuthenticateUserTicketISteamUser/CheckAppOwnership を使用できます。 詳細情報はこちらを参照してください。

キーでアンロックされるソフトウェアのバージョンをコントロールする場合

それぞれのゲームのバージョンに AppID を持つ必要があります。 ゲームクライアントから ISteamUser::GetAuthSessionTicket を呼び出し、ISteamUserAuth/AuthenticateUserTicketISteamUser/CheckAppOwnership を使って所有権を確認します。 詳細情報はこちらを参照してください。