無所屬單位

首頁 文獻與幫助
Steamworks 文獻庫
使用者驗證與所有權

英文原文已更新

本頁原文在翻譯完成後已再次更新。\r
點擊這裡檢視最新的英文版本。

總覽

Steamworks 提供多個方法(Method),用於確認 Steam 使用者的身份並驗證應用程式的所有權。本文將說明不同狀況下採用的各種驗證方法。

在 Steam 中驗證使用者

每位 Steam 使用者都能透過獨一無二的 64 位元數字 ID(又稱使用者的 Steam ID)進行驗證。在 Steamworks C++ API 中,使用者的 SteamID 包含在 CSteamID 物件中。您可以呼叫 ISteamUser::GetSteamID 獲取目前使用者的 Steam ID,然後對回傳值呼叫 CSteamID.ConvertToUint64() 獲取其 64 位元 ID。

以下驗證方法可安全驗證使用者的 Steam ID。

此檔案涉及的 API

工作階段票證

工作階段票證是簽名的票證,可用於在使用者遊戲用戶端與任何數量的其他遊戲用戶端之間(如 P2P 多人遊戲工作階段),或者與偵聽伺服器或專用伺服器之間(透過 ISteamGameServer API),驗證使用者身份。這些票證也可以用於驗證當下的遊戲與相關可下載內容的所有權,決定使用者是否遭受 VAC 封鎖(詳細解說請見 Valve 防作弊機制(VAC)與遊戲封鎖)。

工作階段票證也可以透過 Steamworks Web API,在遊戲用戶端與受防護的後端伺服器之間驗證使用者身份。要求該受防護的伺服器能夠向 api.steampowered.com 發送 HTTPS 請求。

加密的應用程式票證

加密的應用程式票證能在遊戲用戶端與受防護的後端伺服器之間驗證使用者身份。與工作階段票證不同,驗證加密的應用程式票證不需要受防護的伺服器發送 HTTPS 請求。受防護的伺服器使用一個 C++ 程式庫與一個私有的對稱序號來驗證票證。Steamworks SDK 在 public/steam/lib 目錄下包含 Windows 和 Linux 程式庫的 32 位元與 64 位元版本。
使用加密的應用程式票證之前,您必須為各產品製作序號。您可以在您的應用程式的「編輯 Steamworks 設定」中,從「安全」下拉選單中選擇「SDK Auth」。此序號將與您的產品的 AppID 及其任何可下載內容綁定。

備註:這些序號必須存放在安全的場所,絕不能以任何方式在您的應用程式中發放!

Steamworks Web API

Steam 公開了一個以 HTTP 為基礎的 Web API,能用於存取眾多 Steamworks 功能。此 API 包含公共方法,任何可以發出 HTTP 請求的應用程式(如遊戲用戶端或伺服器)皆能存取。此 API 也含有需要驗證的高安全性方法,供受信任的後端應用程式存取。關於 Web API 的詳細說明請見本文

P2P 或遊戲伺服器

工作階段票證

使用者驗證

以下步驟詳細說明了如何使用工作階段票證在使用者遊戲用戶端(用戶端 A)與另一個用戶端或遊戲伺服器(用戶端 B)之間驗證使用者身份:

工作階段票證的重要須知:

所有權驗證

使用工作階段票證時,Steam 將自動驗證當下 AppID 的所有權。如果使用者不擁有當下的 AppID,那麼 ISteamUser::ValidateAuthTicketResponse_tm_eAuthSessionResponse 欄位將設為 k_EAuthSessionResponseNoLicenseOrExpired。在收到使用者的工作階段票證並傳入 ISteamUser::BeginAuthSession 之後,便可使用 ISteamUser::UserHasLicenseForApp 判斷使用者是否擁有特定的可下載內容。

後端伺服器

工作階段票證與 Steamworks Web API

使用者驗證

下列步驟將詳細說明如何使用工作階段票證在使用者遊戲用戶端與受防護的伺服器之間驗證使用者身份:

所有權驗證

使用者身份一經驗證,受防護的伺服器便能使用 ISteamUser/CheckAppOwnership Web API 方法檢查使用者是否擁有特定 AppID,或者呼叫 ISteamUser/GetPublisherAppOwnership 以獲取使用者擁有與所提供的開發者序號綁定的所有 AppID 列表。

加密的應用程式票證

使用者驗證

下列步驟將詳細說明如何使用加密的應用程式票證,在使用者的遊戲用戶端與受防護的伺服器之間,驗證使用者身份:

您可以在 SDK 的 Steamworks API 範例應用程式(SpaceWar)專案中找到實作案例,即 CSpaceWarClient::RetrieveEncryptedAppTicketCSpaceWarClient::OnRequestEncryptedAppTicket

所有權驗證

Steam 只會為擁有相關 AppID 的使用者建立加密的應用程式票證。將加密的應用程式票證解碼之後,伺服器能使用 SteamEncryptedAppTicket::BIsTicketForApp 驗證票證的 AppID 與產品的 AppID 相符。伺服器還能夠使用 SteamEncryptedAppTicket::BUserOwnsAppInTicket 判定使用者是否擁有某個特定的可下載內容(DLC)

基於網頁瀏覽器的 OpenID 驗證

如 OpenID 2.0 規範所定義,Steam 為 OpenID 提供商。在網路瀏覽器內,第三方網站能使用 OpenID 獲取使用者的 SteamID。該 SteamID 可用於第三方網站的登入憑證,或與該網站上的既有帳戶連結。

使用 OpenID 時,使用者透過第三方網站的網頁瀏覽器開始。當使用者希望在該網站中登入帳戶或連至該網站時,網站將使用 OpenID 將使用者轉至 Steam 社區網站上的一個登入表單。當使用者輸入 Steam 登入憑證後,使用者的網頁瀏覽器自動導回第三方網站,並將一些附加 OpenID 特定資料追加入返回 URL。該網站的 OpenID 函式庫隨後能使用這些資料驗證並獲取使用者的 SteamID。

Steam 提供以下圖片,供第三方網站連結至 Steam 登入頁面時使用:
sits_large_border.png

sits_large_noborder.png

sits_small.png

使用者驗證

Steam 的 OpenID 2.0 實作可用於將使用者的 Steam 帳戶連結至他們在第三方網站上的帳戶。
OpenID 網站上能找到一系列開源 OpenID 函式庫。使用 OpenID 驗證使用者身份的步驟如下:
  • 設定您的 OpenID 函式庫,使用以下 URL 為 Steam 的 OP Endpoint URL:https://steamcommunity.com/openid/
  • 使用者經過驗證後,使用者的 Claimed ID 將包含其 Steam ID。Steam Claimed ID 格式為:http://steamcommunity.com/openid/id/<steamid>.

所有權驗證

使用者身份一經驗證,受防護的伺服器便可以使用 ISteamUser/CheckAppOwnership Web API 方法檢查使用者是否擁有特定 AppID,或者呼叫 ISteamUser/GetPublisherAppOwnership 以獲取使用者擁有的與所提供的 Web API 開發商序號綁定的所有 AppID 列表。

範例

將第三方帳戶連結至 Steam 帳戶

將使用者的 SteamID 與第三方帳戶綁定,能夠將第三方帳戶連結至 Steam 帳戶。

使用者的 SteamID 可以在遊戲中或透過網頁瀏覽器安全獲取。一旦進行了初始關聯,您只需驗證使用者的 SteamID,便能允許其安全地存取第三方帳戶。這樣一來,Steam 使用者無需再於第三方帳戶系統進行二次登入。此外,如果有新 SteamID,新的第三方帳戶也能自動建立並連結,Steam 使用者根本不會知道發生了二次驗證。取代舊作法的是,他們的單個 Steam 帳戶將給予他們的所有遊戲的存取權限,使使用者體驗更流暢,並去除了安裝、試玩新遊戲的潛在障礙。

從遊戲內連結

透過 Steamworks Web API,工作階段票證可用於在遊戲用戶端與安全後端伺服器之間驗證使用者身份:

從網頁瀏覽器連結

Steam 支援 OpenID 2.0 規格,因此您可以允許使用者從您的網站安全地登入其 Steam 帳戶,您也可以獲取他們的 SteamID。在 Steam 上使用 OpenID 的詳細說明請見使用 OpenID

所有權驗證

使用者身份一經驗證,受防護的伺服器便能使用 ISteamUser/CheckAppOwnership Web API 方法檢查使用者是否擁有特定 AppID,或者呼叫 ISteamUser/GetPublisherAppOwnership 以獲取使用者擁有與所提供的開發者序號綁定的所有 AppID 列表。

從第三方遊戲序號遷移至原生 Steam 所有權檢查

Steam 本身有許多途徑供產品驗證玩家身分,移除對第三方序號的需求。我們列出了一系列 CD 序號的常見使用狀況,以及各種情況下如何在 Steam 上原生實作:

存取私人論壇

您可能會希望透過 OpenID 讓使用者直接登入他們的 Steam 帳戶。OpenID 將回傳使用者的 64 位元 SteamID,用來 ISteamUser/CheckAppOwnership 驗證使用者是否擁有您的 AppID。將第三方帳戶連結至 Steam 帳戶的詳細說明請見上述將第三方帳戶連結至 Steam 帳戶章節。

解鎖非 Steam、無DRM 組建的遊戲

使用 OpenID 與 ISteamUser/CheckAppOwnership見上文),解鎖您自己網站的內容。或以可選購的免費 DLC 的方式上傳無 DRM 組建的內容。

軟體可使用序號解鎖,於我自己的網站上出售

您可能想要讓使用者透過 OpenID 直接登入他們的 Steam 帳戶。OpenID 將回傳使用者的 64 位元 SteamID,用來 ISteamUser/CheckAppOwnership,驗證使用者是否擁有您的 AppID。詳細說明請見上文的 將第三方帳戶連結至 Steam 帳戶章節。

為註冊您的第三方序號掉落遊戲內物品

如果您使用 Steam 物品庫服務,確定物品的 itemdef 正確設定為促銷物品,並從用戶端呼叫 ISteamInventory::AddPromoItem
如果您有自己的物品後端,您可以從遊戲用戶端呼叫 ISteamUser::GetAuthSessionTicket,然後使用 ISteamUserAuth/AuthenticateUserTicketISteamUser/CheckAppOwnership 驗證所有權。深入閱讀

序號控制將解鎖軟體的哪個版本

您的遊戲的各版本應該有各自的 AppID。從遊戲用戶端呼叫 ISteamUser::GetAuthSessionTicket,然後使用 ISteamUserAuth/AuthenticateUserTicketISteamUser/CheckAppOwnership 驗證所有權。深入閱讀