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í:
- Každý tiket relace smí být použit jenom jednou. Funkce ISteamUser::GetAuthSessionTicket musí být zavolána pro každého klienta v relaci, který si vyžádá tiket.
- Při ověřování totožnosti v relaci peer-to-peer by měl každý herní klient ověřit totožnost každého dalšího klienta přítomného v relaci.
- Po skončení relace musí být pro každý popisovač vrácený funkcí ISteamUser::GetAuthSessionTicket zavolána funkce ISteamUser::CancelAuthTicket.
- Když klient A zavolá funkci ISteamUser::CancelAuthTicket, klient B obdrží zpětné volání ISteamUser::ValidateAuthTicketResponse_t uvádějící, že tiket klienta A už není platný.
- Když klient A opustí relaci s klientem B a zavolání funkce ISteamUser::CancelAuthTicket klientem A je zpracováno před zavoláním funkce ISteamUser::EndAuthSession klientem B, klient B může obdržet zpětné volání ISteamUser::ValidateAuthTicketResponse_t uvádějící, že tiket byl zrušen. Protože však mezi klienty existuje vzájemná shoda, že klient A opouští relaci, je toto zpětné volání možné ignorovat.
- Problémy se spojením mohou backendu služby Steam na neurčitou dobu zamezit v odeslání zpětného volání po zavolání funkce ISteamUser::BeginAuthSession. Volající funkce ISteamUser::BeginAuthSession (klient B) by však neměl předpokládat, že zná pravou totožnost klienta A, dokud nepřijme zmíněné zpětné volání. Relace nicméně může pokračovat.
- Pokud volající funkce ISteamUser::BeginAuthSession přijme zpětné volání ISteamUser::ValidateAuthTicketResponse_t uvádějící, že tiket klienta A je neplatný, volající musí odmítnout pokračování relace s klientem A. Pokud ostatní klienty v relaci pokračování neodmítnou, volající by měl relaci opustit.
- Rozhraní ISteamGameServer nabízí stejné metody tiketů relací pro ověření mezi herním klientem a herním serverem.
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:



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.