Dokumentace systému Steamworks
Ověření totožnosti a vlastnictví

Přehled

Systém Steamworks nabízí vícero metod ověření totožnosti uživatele a jeho vlastnictví dané aplikace. Na této stránce jsou popsány jednotlivé metody použité v následujících situacích:

Ověření totožnosti uživatele v rámci služby Steam

Totožnost každého uživatele služby Steam může být ověřena pomocí 64bitového numerického identifikátoru známého jako Steam ID. V C++ API systému Steamworks se uživatelovo Steam ID nachází v objektu CSteamID. Steam ID aktuálního uživatele můžete získat zavoláním funkce ISteamUser::GetSteamID a na 64bitové ho konvertovat pomocí CSteamID.ConvertToUint64().

Následující metody lze použít k bezpečnému ověření Steam ID daného uživatele.

API popsaná na této stránce

Tikety relací

Tikety relací jsou podepsané tikety, které lze použít k ověření totožnosti uživatele mezi jeho herním klientem a libovolným počtem jiných herních klientů (např. v relacích peer-to-peer) nebo mezi jeho herním klientem a dedikovaným/listen herním serverem (za použití rozhraní ISteamGameServer). Tyto tikety mohou být dále použity k ověření vlastnictví aktuální hry a souvisejících DLC a k určení toho, zdali na uživatele není uvalen ban ochrany VAC (viz stránka Ochrany proti cheatování a herní bany).
Tikety relací mohou být použity také ve spojení s webovými API, a to k ověření totožnosti uživatele mezi herním klientem a zabezpečeným backendovým serverem. Pro to je však vyžadováno, aby zabezpečený server zvládal odesílat HTTPS dotazy na adresu partner.steam-api.com.

Šifrované tikety aplikací

Šifrované tikety aplikací lze použít k ověření totožnosti uživatele mezi herním klientem a zabezpečeným backendovým serverem. Na rozdíl od tiketů relací není pro ověření šifrovaných tiketů aplikací nutné, aby zabezpečený server zvládal odesílat HTTPS dotazy – místo toho tikety ověřuje pomocí knihovny C++ a soukromého symetrického klíče. Nástroje Steamworks SDK zahrnují v adresáři public/steam/lib 32bitovou i 64bitovou verzi této knihovny, a to pro systémy Windows a Linux.

Než začnete používat šifrované tikety, musíte pro každou aplikaci vygenerovat soukromý klíč. To provedete tak, že pro danou aplikaci přejdete do „Nastavení v systému Steamworks“ a v záložce „Zabezpečení“ vyberete „Ověření totožnosti“. Vygenerovaný klíč bude spojený s ID aplikace a všemi jejími DLC. Pro možnost vygenerovat tento klíč musíte pro aplikaci disponovat oprávněním „Spravování podpisů“.
POZNÁMKA: Tyto klíče musí být bezpečně uloženy a nesmí být distribuovány v aplikacích!

Webová API systému Steamworks

Služba Steam nabízí webová API založená na protokolu HTTP, která lze použít pro přístup k celé řadě funkcí systému Steamworks. Tato API zahrnují jak veřejné metody přístupné z libovolné aplikace schopné odesílat HTTP dotazy (takovou aplikací může být například herní klient nebo server), tak zabezpečené metody, které vyžadují ověření a přistupováno je k nim z důvěryhodných backendových aplikací. Více informací o webových API naleznete zde.

P2P spojení nebo herní servery

Tikety relací

Ověření totožnosti

Následující kroky detailně popisují, jak s použitím tiketů relací ověřit totožnost uživatele mezi jeho herním klientem (klient A) a jiným klientem nebo herním serverem (klient B):

Několik důležitých poznámek ohledně tiketů relací:

Ověření vlastnictví

Při používání tiketů relací služba Steam automaticky ověří vlastnictví aktuálního ID aplikace. Pokud uživatel aktuální ID aplikace nevlastní, pole m_eAuthSessionResponse zpětného volání ISteamUser::ValidateAuthTicketResponse_t bude nastaveno na k_EAuthSessionResponseNoLicenseOrExpired. Po přijetí tiketu relace uživatele a jeho předání funkci ISteamUser::BeginAuthSession lze zavoláním funkce ISteamUser::UserHasLicenseForApp určit, zdali uživatel vlastní konkrétní DLC.

Backendový server

Tikety relací a webová API systému Steamworks

Ověření totožnosti

Následující kroky detailně popisují, jak s použitím tiketů relací ověřit totožnost uživatele mezi jeho herním klientem a zabezpečeným serverem:

Ověření vlastnictví

Jakmile je ověřena totožnost uživatele, zabezpečený server může prostřednictvím metody ISteamUser/CheckAppOwnership zkontrolovat, zdali uživatel vlastní konkrétní ID aplikace, nebo pomocí metody ISteamUser/GetPublisherAppOwnership získat seznam všech uživatelem vlastněných ID aplikací, které jsou přiřazeny k poskytnutému vydavatelskému klíči.

Šifrované tikety aplikací

Ověření totožnosti

Následující kroky detailně popisují, jak s použitím šifrovaných tiketů aplikací ověřit totožnost uživatele mezi jeho herním klientem a zabezpečeným serverem:

Ukázku implementace lze nalézt v projektu Steamworks API Example Application (SpaceWar) v nástrojích SDK. Konkrétně hledejte CSpaceWarClient::RetrieveEncryptedAppTicket a CSpaceWarClient::OnRequestEncryptedAppTicket.

Ověření vlastnictví

Služba Steam vytvoří šifrovaný tiket aplikace pouze pro uživatele, který vlastní příslušné ID aplikace. Po dešifrování tiketu může zabezpečený server pomocí funkce SteamEncryptedAppTicket::BIsTicketForApp ověřit, zdali ID aplikace u tiketu odpovídá ID aplikace dané hry. Server může také pomocí funkce SteamEncryptedAppTicket::BUserOwnsAppInTicket zjistit, zdali uživatel vlastní konkrétní DLC.

Ověření za použití standardu OpenID v prohlížeči

Služba Steam je v souladu se specifikacemi standardu OpenID 2.0 považována za jeho poskytovatele. Ve webovém prohlížeči mohou tedy webové stránky třetích stran prostřednictvím standardu OpenID získat Steam ID daného uživatele a to následně použít místo přihlašovacích údajů, nebo ho propojit se stávajícím účtem vedeným ve svých záznamech.

Fungování je následující. Uživatel začíná v prohlížeči na webové stránce třetí strany, a když se rozhodne přihlásit, nebo propojit své účty, stránka ho prostřednictvím standardu OpenID přesměruje na přihlašovací formulář v komunitě služby Steam. Jakmile uživatel zadá své přihlašovací údaje k účtu služby Steam, prohlížeč je automaticky přesměrován zpět na stránku třetí strany, ale návratová URL adresa nese několik dodatečných údajů, které stránka skrze svoji knihovnu standardu OpenID použije pro ověření a získání Steam ID uživatele.

Stránky třetích stran mohou při odkazování na přihlášení ve službě Steam použít následující oficiální obrázky:
Přihlášení skrze službu Steam (velký obrázek s okrajem)

Přihlášení skrze službu Steam (velký obrázek bez okraje)

Přihlášení skrze službu Steam (malý obrázek)

Ověření totožnosti

Díky implementaci standardu OpenID 2.0 lze propojit uživatelův účet služby Steam s jeho účtem na webové stránce třetí strany.
Seznam open source knihoven standardu OpenID naleznete zde. Pro ověření totožnosti uživatele je pak třeba následující:
  • Nakonfigurujte svoji knihovnu standardu OpenID, aby jako URL adresu koncového bodu používala https://steamcommunity.com/openid/.
  • Až dojde k ověření totožnosti uživatele, jeho „nárokované ID“ („Claimed ID“) bude obsahovat jeho Steam ID, a to ve formátu http://steamcommunity.com/openid/id/<steamid>.

Ověření vlastnictví

Jakmile je ověřena totožnost uživatele, zabezpečený server může prostřednictvím metody ISteamUser/CheckAppOwnership zkontrolovat, zdali uživatel vlastní konkrétní ID aplikace, nebo pomocí metody ISteamUser/GetPublisherAppOwnership získat seznam všech uživatelem vlastněných ID aplikací, které jsou přiřazeny k poskytnutému vydavatelskému klíči.

Ukázky

Propojení účtu třetí strany s účtem služby Steam

Účet třetí strany může být s účtem služby Steam propojen přiřazením Steam ID.

Uživatelovo Steam ID lze získat buď přímo ve hře, nebo skrze webový prohlížeč, a jakmile dojde k prvotnímu přiřazení, můžete povolit bezpečný přístup k účtu třetí strany pouhým ověřením Steam ID, čímž eliminujete nutnost sekundárního přihlašování. Co víc, pokud je možné, aby byl účet třetí strany vytvořen a propojen automaticky, když se objeví nové Steam ID, uživatel ani nemusí vědět, že k nějakému sekundárnímu ověřování dochází – jeho účet služby Steam mu zajistí přístup ke všem jeho hrám a odstraní potenciální překážky při instalování a zkoušení nových her.

Propojení ze hry

Pro ověření totožnosti uživatele mezi herním klientem a zabezpečeným backendovým serverem lze použít tikety relací a webová API systému Steamworks:

Propojení z prohlížeče

Služba Steam podporuje standard OpenID 2.0, takže uživatel se může na Vašich webových stránkách bezpečně přihlásit ke svému účtu služby Steam a Vy získáte jeho Steam ID. Více informací o použití standardu OpenID se dočtete zde.

Ověření vlastnictví

Jakmile je ověřena totožnost uživatele, zabezpečený server může prostřednictvím metody ISteamUser/CheckAppOwnership zkontrolovat, zdali uživatel vlastní konkrétní ID aplikace, nebo pomocí metody ISteamUser/GetPublisherAppOwnership získat seznam všech uživatelem vlastněných ID aplikací, které jsou přiřazeny k poskytnutému vydavatelskému klíči.

Přechod z CD klíčů třetích stran na nativní ověření vlastnictví

Ve službě Steam je dostupných hned několik způsobů, jak hra může ověřit totožnost uživatele i bez CD klíče třetí strany. Níže jsme tedy připravili výčet častých případů použití CD klíčů a ke každému přidali způsob, jak ho nativně implementovat ve službě Steam:

Přístup do soukromého fóra

Uživatel se s použitím standardu OpenID přihlásí přímo ke svému účtu služby Steam, načež se Vám vrátí jeho 64bitové Steam ID, které lze přes metodu ISteamUser/CheckAppOwnership použít k ověření vlastnictví ID Vaší aplikace. Více informací naleznete výše v sekci Propojení účtu třetí strany s účtem služby Steam.

Odemknutí buildu bez ochrany DRM

Pro odemknutí obsahu na svých webových stránkách použijte standard OpenID a metodu ISteamUser/CheckAppOwnership (viz výše). Alternativně můžete build bez ochrany DRM nahrát jako volitelné bezplatné DLC.

Odemknutí softwaru, který je prodáván na webových stránkách vývojáře

Uživatel se s použitím standardu OpenID přihlásí přímo ke svému účtu služby Steam, načež se Vám vrátí jeho 64bitové Steam ID, které lze přes metodu ISteamUser/CheckAppOwnership použít k ověření vlastnictví ID Vaší aplikace. Více informací naleznete výše v sekci Propojení účtu třetí strany s účtem služby Steam.

Udělení herních položek za aktivaci klíče

Pokud používáte funkci Inventář, ujistěte se, že daná položka je správně nakonfigurována jako propagační a z herního klienta zavolejte funkci ISteamInventory::AddPromoItem.
Pokud máte pro položky svůj vlastní backend, můžete z herního klienta zavolat funkci ISteamUser::GetAuthSessionTicket a následně pomocí metod ISteamUserAuth/AuthenticateUserTicket a ISteamUser/CheckAppOwnership ověřit vlastnictví. Více informací naleznete zde.

CD klíč určuje, která verze softwaru je odemčena

Každá verze Vaší hry by měla mít vlastní ID aplikace. Z herního klienta poté zavolejte funkci ISteamUser::GetAuthSessionTicket a následně pomocí metod ISteamUserAuth/AuthenticateUserTicket a ISteamUser/CheckAppOwnership ověřte vlastnictví. Více informací naleznete zde.