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

バックエンドサーバー

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

ユーザー認証

The following steps detail how to use Session Tickets to verify a user's identity between the user's game client and a secure server:
  • クライアントは、ISteamUser::GetAuthSessionTicket を呼び出してセッションチケットを取得する必要があります。
  • 有効なチケットを保証するため、クライアントは ISteamUser::GetAuthSessionTicketResponse_t コールバックを待つ必要があります。
  • クライアントはそのセッションチケットをセキュアサーバーに送信する必要があります。
  • セキュアサーバーはpartner.steam-api.comにHTTPSリクエストを作成し、 ISteamUserAuth/AuthenticateUserTicket Webメソッドを呼び出し、ユーザーのセッションチケットをHex エンコードされたUTF-8文字列として送信します。 このメソッドは、提供されたチケットが渡される AppID に関連付けられた Steam Web API キー、または Web API パブリッシャーキーを許可することにご注意ください。 この API への将来のアップデートでは、Web API パブリッシャーキーが提供された時に、呼び出し元にさらなる情報を返す可能性があります。
  • ユーザーのチケットが有効な場合、ISteamUserAuth/AuthenticateUserTicket がユーザーの 64 ビット SteamID を返します。

所有権の確認

Once a user's identity has been verified, a secure server can use the ISteamUser/CheckAppOwnership Web API method to check if the user owns a particular AppID, or call ISteamUser/GetPublisherAppOwnership to retrieve a list of all user owned AppIDs that are associated with the provided Publisher Key.

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

ユーザー認証

The following steps detail how to use Encrypted Application Tickets to verify a user's identity between the user's game client and a secure server:

An example implementation can be found in the Steamworks APIのサンプルアプリケーション(SpaceWar) project in the SDK. Specifically CSpaceWarClient::RetrieveEncryptedAppTicket and CSpaceWarClient::OnRequestEncryptedAppTicket.

所有権の確認

Steam will only create Encrypted Application Tickets for users who own the AppID for which the ticket was created. After decrypting an Encrypted Application Ticket, the secure server can use SteamEncryptedAppTicket::BIsTicketForApp to verify the AppID of the ticket matches the title's AppID. The server can also use SteamEncryptedAppTicket::BUserOwnsAppInTicket to determine if the user owns a specific piece of ダウンロードコンテンツ (DLC).

Web ブラウザベースの OpenID 認証

Steam is an OpenID Provider, as described in the OpenID 2.0 specification. Inside a web browser, a third-party website can use OpenID to obtain a user's SteamID which can be used as the login credentials for the 3rd party website, or linked to an existing account on that website.

When using OpenID, the user begins in a web browser at the third-party website. When the user wishes to login/link their account to that website, using OpenID, the site directs the user to a login form on the Steam Community website. Once the user has entered their Steam login credentials, the user's web browser is automatically redirected back to the 3rd party website with some additional OpenID specific data appended to the return URL. The site's OpenID library can then use this data to verify and obtain the user's SteamID.

Steam provides the following images which may be used by 3rd party sites when linking to the Steam sign in page:
sits_large_border.png

sits_large_noborder.png

sits_small.png

ユーザー認証

Steam's OpenID 2.0 implementation can be used to link a users Steam account to their account on the third-party website.
A list of open source OpenID libraries can be found at the OpenID website. To use OpenID to verify a user's identity:
  • https://steamcommunity.com/openid/ を Steam の OP エンドポイント URL として使用するように OpenID ライブラリを設定してください。
  • ユーザーが認証されると、そのユーザーの Claimed ID には SteamID が追加されます。 Steam Claimed ID の形式は : http://steamcommunity.com/openid/id/<steamid>です。

所有権の確認

Once a user's identity has been verified, a secure server can use the ISteamUser/CheckAppOwnership Web API method to check if the user owns a particular AppID, or call ISteamUser/GetPublisherAppOwnership to retrieve a list of all user owned AppIDs that are associated with the provided Web API Publisher Key.

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

Third-party accounts can be linked to Steam accounts by associating a user's SteamID with the 3rd party account.

A user's SteamID can be securely retrieved either in-game or through a web browser and once the initial association has occurred, you can safely allow access to the 3rd party account by merely verifying a user's SteamID. This eliminates the need for Steam users to do any sort of secondary login to 3rd party account systems. Additionally, if new 3rd party accounts can be automatically created and linked when a new SteamID is encountered, the Steam user will never have to be aware that a secondary authentication is taking place at all. Instead, their single Steam account can grant access to all of their games, streamlining the user experience and removing potential barriers to installing and trying new games.

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

Session Tickets can be used to verify a user's identity between a game client and a secure, backend server using the 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 を返します。

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

Steam supports the OpenID 2.0 specification so that you can allow users to securly log into their Steam accounts from your website and retrieve their SteamID. For details on how to use OpenID with Steam go to Using OpenID

所有権の確認

Once a user's identity has been verified, a secure server can use the ISteamUser/CheckAppOwnership Web API method to check if the user owns a particular AppID, or call ISteamUser/GetPublisherAppOwnership to retrieve a list of all user owned AppIDs that are associated with the provided Web API Publisher Key.

サードパーティ CD キーから ネイティブの Steam 所有権チェックへの移行

Steam itself has a number of ways a title can authenticate a user with, removing the need for a third-party CD key. We've compiled a list of common use cases for CD Keys and how you might implement each case natively with Steam:

プライベートフォーラムのアクセス

You'll want to have users login directly with their Steam account using OpenID. OpenID will return the user's 64bit SteamID which can then be used with ISteamUser/CheckAppOwnership to verify the user owns your appid. More details can be found above at Linking 3rd party accounts to Steam accounts.

非 Steam ゲームの DRM 無しのビルドをアンロックする

Use OpenID and ISteamUser/CheckAppOwnership (documented above) to unlock the content on your own site. Alternatively, you could upload the DRM-free build as optional, free DLC.

ソフトウェアを自身の運営する Web サイトで販売し、キーを使ってアンロックしている場合

You'll want to have users login directly with their Steam account using OpenID. OpenID will return the user's 64bit SteamID which can then be used with ISteamUser/CheckAppOwnership to verify the user owns your appid. More details can be found in サードパーティアカウントを Steam アカウントにリンクする above.

サードパーティキーの登録に対して、ゲーム内アイテムをドロップする場合

If you are using the Steam Inventory Service, make sure the item's itemdef is configured correctly as a promo item and call ISteamInventory::AddPromoItem from the client.
If you have your own item backend, you can call ISteamUser::GetAuthSessionTicket from the game client and then use ISteamUserAuth/AuthenticateUserTicket with ISteamUser/CheckAppOwnership to verify ownership. More Information...

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

Each version of your game should have its own AppID. From the game client, call ISteamUser::GetAuthSessionTicket and then use ISteamUserAuth/AuthenticateUserTicket with ISteamUser/CheckAppOwnership to verify ownership. More Information...