Steamworks dokumentáció
Felhasználóhitelesítés és birtoklás

Áttekintés

A Steamworks több módszert tesz hozzáférhetővé a Steam felhasználók személyazonosságának hitelesítésére és az alkalmazások birtoklásának ellenőrzésére. A következő dokumentáció leírja e hitelesítési mechanizmusok mindegyikét, a következő helyzetekben használva:

Felhasználó azonosítása a Steamen

Minden Steam felhasználó egyedileg azonosítható egy 64 bites numerikus azonosítóval, amit a felhasználó SteamID-jének neveznek. A Steamworks C++ API-kban a felhasználó SteamID-jét egy CSteamID objektum tartalmazza. A jelenlegi felhasználó SteamID-jét az ISteamUser::GetSteamID meghívásával, majd a 64 bites azonosító kinyerésére a visszaadott értékre a CSteamID.ConvertToUint64() meghívásával tudod lekérni.

A következő hitelesítési módszerek használhatók egy felhasználó SteamID-jének biztonságos ellenőrzésére.

Az e dokumentációban tárgyalt API-k

Munkamenetjegyek

A munkamenetjegyek olyan aláírt jegyek, amelyek használatával ellenőrizhető egy felhasználó személyazonossága a felhasználó játékkliense és tetszőleges számú más játékkliens között (például peer-to-peer többjátékos munkamenetben), vagy egy hallgató/dedikált játékszerveren (az ISteamGameServer API használatával). Ezek a jegyek használhatók a jelenlegi játék és a kapcsolódó letölthető tartalom birtoklásának ellenőrzésére is, valamint annak megállapítására, hogy a felhasznál kapott-e VAC-kitiltást (lásd: Valve Anti-Cheat (VAC) és játékkitiltások).
A munkamenetjegyek egy játékkliens és egy biztonságos háttérszolgáltatás-szerver között is használhatók egy felhasználó személyazonosságának ellenőrzésére a Steamworks Web API használatával. Ez megköveteli, hogy a biztonságos szerver HTTPS-kéréseket tudjon küldeni a partner.steam-api.com-nak.

Titkosított alkalmazásjegyek

A titkosított alkalmazásjegyek használatával ellenőrizhető egy felhasználó személyazonossága egy játékkliens és egy biztonságos háttérszolgáltatás-szerver között. A munkamenetjegyekkel ellentétben a titkosított alkalmazásjegyek ellenőrzéséhez nem szükséges, hogy a biztonságos szerver HTTPS-kéréseket tudjon küldeni. Ehelyett a biztonságos szerver egy C++ könyvtárat és egy privát, szimmetrikus kulcsot használ a jegy ellenőrzéséhez. A Steamworks SDK tartalmazza e könyvtár 32 bites és 64 bites változatait Windowshoz és Linuxhoz a public/steam/lib könyvtárban.

Titkosított alkalmazásjegyek használata előtt minden játékhoz privát kulcsot kell létrehoznod. Ezt az alkalmazásod Steamworks beállításainak szerkesztése részhez navigálva, majd a „Biztonság” legördülő menüből az „SDK autentikáció” lehetőséget választva tudod megtenni. Ez a kulcs hozzá lesz rendelve a játékod AppID-jéhez, és az ahhoz tartozó mindegyik letölthető tartalomhoz. A Steamworks e szakaszának eléréséhez a felhasználónak rendelkeznie kell az „Aláírások kezelése” engedéllyel a kérdéses alkalmazáshoz.
MEGJEGYZÉS: ezeket a kulcsokat biztonságosan kell tárolni, és semmilyen módon nem szabad terjeszteni az alkalmazásodban!

Steamworks Web API

A Steam elérhetővé tesz egy HTTP alapú webes API-t, amely számos Steamworks funkció elérésére használható. Az API tartalmaz nyilvános metódusokat, amelyek bármilyen HTTP kérés küldésére képes alkalmazásból elérhetők, például játékkliensből vagy szerverből. Az API tartalmaz védett metódusokat is, amelyek hitelesítést igényelnek, és megbízható háttéralkalmazásokból való elérésre szolgálnak. A webes API-ról további részletek itt találhatók.

P2P vagy játékszerverek

Munkamenetjegyek

Felhasználóhitelesítés

A következő lépések részletezik, hogyan kell munkamenetjegyeket használni egy felhasználó személyazonosságának ellenőrzésére a felhasználó játékkliense (A kliens) és egy másik kliens vagy játékszerver (B kliens) között:

Néhány fontos megjegyzés a munkamenetjegyekről:
  • A munkamenetjegyeket csak egyszer szabad használni. Az ISteamUser::GetAuthSessionTicket-et a többjátékos munkamenetben jegyet kérő minden klienshez meg kell hívni.
  • Amikor peer-to-peer többjátékos munkamenetben van játékosok hitelesítésére használva, mindegyik játékkliensnek ellenőriznie kell a többjátékos munkamenetben részt vevő összes többi játékkliens azonosságát.
  • Egy munkamenetjegy használatának befejezésekor az ISteamUser::GetAuthSessionTicket által visszaküldött összes leíróhoz meg kell hívni az ISteamUser::CancelAuthTicket-et.
  • Amikor az „A” kliens meghívja az ISteamUser::CancelAuthTicket-et, a „B” kliens kapni fog egy ISteamUser::ValidateAuthTicketResponse_t callbacket, amely jelzi, hogy az „A” kliens jegye már nem érvényes.
  • Amikor az „A” kliens kilép egy „B” klienssel közös játékból, ha az „A” kliens ISteamUser::CancelAuthTicket hívása a „B” kliens ISteamUser::EndAuthSession hívása előtt kerül feldolgozásra, akkor a „B” kliens kaphat egy olyan ISteamUser::ValidateAuthTicketResponse_t callbacket, amely közli, hogy a jegyet törölték. Mivel kölcsönös egyetértés van abban, hogy az „A” kliens távozik, ez a callback figyelmen kívül hagyható.
  • Hálózati állapotok meghatározatlan ideig megakadályozhatják a Steam háttérrendszert abban, hogy callbacket adjon az ISteamUser::BeginAuthSession hívójának. Az ISteamUser::BeginAuthSession („B” kliens) hívója nem feltételezheti, hogy ismeri az „A” kliens valódi kilétét, amíg meg nem kapja ezt a callbacket, de engedélyeznie kell a többjátékos munkamenet folytatását.
  • Ha az ISteamUser::BeginAuthSession hívója olyan ISteamUser::ValidateAuthTicketResponse_t callbacket kap, amely szerint az „A” kliens jegye érvénytelen, a hívónak meg kell tagadnia a többjátékos munkamenet folytatását az „A” klienssel. Ha a játék többi végpontja nem utasítja el szintén az „A” klienssel való játékot, a hívónak el kell hagynia a többjátékos munkamenetet.
  • Az ISteamGameServer ugyanezeket a munkamenetjegy-metódusokat teszi elérhetővé a hitelesítés végrehajtására egy játékkliens és egy játékszerver között.

Birtoklás-ellenőrzés

Munkamenetjegyek használatakor a Steam automatikusan ellenőrizni fogja a jelenlegi AppID birtoklását. Ha a felhasználó nem birtokolja a jelenlegi AppID-t, akkor az ISteamUser::ValidateAuthTicketResponse_t m_eAuthSessionResponse mezője k_EAuthSessionResponseNoExpiredNo[/api] értékre lesz állítva. Miután megérkezett egy felhasználó munkamenetjegye, és át lett adva az ISteamUser::BeginAuthSession-nek, az ISteamUser::UserHasLicenseForApp használatával megállapítható, hogy a felhasználó birtokol-e egy adott letölthető tartalmat.

Háttérszolgáltatás-szerver

Munkamenetjegyek és a Steamworks Web API

Felhasználóhitelesítés

A következő lépések részletezik, hogyan kell munkamenetjegyeket használni egy felhasználó személyazonosságának ellenőrzésére a felhasználó játékkliense és egy biztonságos szerver között:
  • A kliensnek le kell kérnie egy munkamenetjegyet az ISteamUser::GetAuthTicketForWebApi meghívásával.
  • Érvényes jegy garantálásához a kliensnek meg kell várnia az ISteamUser::GetTicketForWebApiResponse_t callbacket.
  • A kliensnek el kell küldenie a munkamenetjegyét a biztonságos szervernek.
  • A biztonságos szervernek HTTPS-kérést kell küldenie a partner.steam-api.com címre, és meg kell hívnia az ISteamUserAuth/AuthenticateUserTicket webes metódust, átadva a felhasználó munkamenetjegyét hexadecimálisan kódolt UTF-8 karakterláncként. Kérjük, vedd figyelembe, hogy ez a metódus olyan Steam Web API kulcs vagy Web API kiadói kulcs beküldését is megengedi, amely a megadott jegy AppID-jéhez van társítva. Az API jövőbeli frissítése Web API kiadói kulcs beküldésekor esetleg további információkat is visszaadhat a hívónak.
  • Ha a felhasználó jegye érvényes, akkor az ISteamUserAuth/AuthenticateUserTicket visszaadja a felhasználó 64 bites SteamID-jét.

Birtoklás-ellenőrzés

Egy felhasználó személyazonosságának ellenőrzése után egy biztonságos szerver az ISteamUser/CheckAppOwnership Web API metódussal ellenőrizni tudja, hogy a felhasználó birtokol-e egy adott AppID-t, vagy meghívhatja az ISteamUser/GetPublisherAppOwnership-et a felhasználó birtokolta összes olyan AppID listájának lekéréséhez, amelyek a megadott kiadói kulcshoz vannak társítva.

Titkosított alkalmazásjegyek

Felhasználóhitelesítés

A következő lépések részletezik, hogyan kell titkosított munkamenetjegyeket használni egy felhasználó személyazonosságának ellenőrzésére a felhasználó játékkliense és egy biztonságos szerver között:

Egy példa megvalósítás megtalálható az SDK Steamworks API példaalkalmazás (SpaceWar) projektjében. Konkrétan a CSpaceWarClient::RetrieveEncryptedAppTicket és a CSpaceWarClient::OnRequestEncryptedAppTicket.

Birtoklás-ellenőrzés

A Steam csak olyan felhasználóknak hoz létre titkosított alkalmazásjegyeket, akik birtokolják az AppID-t, amelyhez a jegyet létrehozták. Egy titkosított alkalmazásjegy visszafejtése után a biztonságos szerver az SteamEncryptedAppTicket::BIsTicketForApp használatával ellenőrizni tudja, hogy a jegy AppID-je megegyezik-e a játék AppID-jével. A szerver a SteamEncryptedAppTicket::BUserOwnsAppInTicket használatával azt is meg tudja határozni, hogy a felhasználó birtokol-e egy bizonyos Letölthető tartalom (DLC)-t.

Webböngésző alapú hitelesítés OpenID-vel

A Steam OpenID szolgáltató, az OpenID 2.0 specifikációjában leírtak szerint. Egy webböngészőben egy külső weboldal az OpenID használatával meg tudja kapni egy felhasználó SteamID-jét, ami használható bejelentkezési hitelesítő adatként a külső weboldalhoz, vagy összekapcsolható egy létező fiókkal azon a weboldalon.

Az OpenID használatakor a felhasználó egy webböngészőben kezd a külső weboldalon. Amikor a felhasználó az OpenID használatával szeretne bejelentkezni, vagy összekapcsolni fiókját azzal a weboldallal, a weboldal a Steam Közösség weboldalán levő bejelentkezési űrlapra irányítja a felhasználót. Miután a felhasználó megadta Steam bejelentkezési adatait, a webböngészőjét automatikusan visszairányítjuk a külső weboldalra, néhány további OpenID-specifikus adatot csatolva a visszatérési URL-hez. A weboldal OpenID könyvtára ezután ezen adatok használatával ellenőrzi és beszerzi a felhasználó SteamID-jét.

A Steam biztosítja a következő képeket, amelyeket a külső weboldalak használhatnak, amikor a Steam bejelentkezési oldalára hivatkoznak:
sits_large_border.png

sits_large_noborder.png

sits_small.png

Felhasználóhitelesítés

A Steam OpenID 2.0 megvalósítása használható egy felhasználó Steam fiókjának összekapcsolására a külső weboldalon lévő fiókjával.
Az OpenID weboldalon található egy lista nyílt forráskódú OpenID könyvtárakról. Az OpenID használatához egy felhasználó személyazonosságának ellenőrzésére:
  • Állítsd be az OpenID könyvtáradat úgy, hogy a következő URL-t használja a Steam OP végpont URL-jeként: https://steamcommunity.com/openid/
  • Egy felhasználó hitelesítése után annak ClaimedID-je tartalmazni fogja a SteamID-jét. A Steam ClaimedID formátuma: http://steamcommunity.com/openid/id/<steamid>

Birtoklás-ellenőrzés

Egy felhasználó személyazonosságának ellenőrzése után egy biztonságos szerver az ISteamUser/CheckAppOwnership Web API metódussal ellenőrizni tudja, hogy a felhasználó birtokol-e egy adott AppID-t, vagy meghívhatja az ISteamUser/GetPublisherAppOwnership-et a felhasználó birtokolta összes olyan AppID listájának lekéréséhez, amelyek a megadott Web API kiadói kulcshoz vannak társítva.

Példák:

Külső fiókok összekapcsolása Steam fiókokkal

Külső fiókok a felhasználó SteamID-jének a külső fiókhoz társításával kapcsolhatók össze Steam fiókokkal.

Egy felhasználó SteamID-je biztonságosan lekérhető akár játékban, akár webböngészőn keresztül, és az első társítás megtörténte után biztonságosan engedélyezheted a hozzáférést a külső fiókhoz, pusztán a felhasználó SteamID-jének ellenőrzésével. Ez megszünteti annak szükségességét, hogy a Steam felhasználók bármilyen másodlagos bejelentkezést végezzenek külső fiókrendszerekbe. Továbbá, ha új SteamID esetén automatikusan létrehozható és összekapcsolható új külső fiók, akkor a Steam felhasználónak egyáltalán nem is kell tudnia, hogy másodlagos hitelesítés történik. Ehelyett az egyetlen Steam fiókja hozzáférést tud adni az összes játékéhoz, egyszerűsítve a felhasználói élményt, és eltávolítva az új játékok telepítése és kipróbálása előtti esetleges akadályokat.

Összekapcsolás játékon belülről

Munkamenetjegyekkel ellenőrizhető egy felhasználó személyazonossága egy játékkliens és egy biztonságos háttérszolgáltatás-szerver között a Steamworks Web API használatával:

Összekapcsolás webböngészőből

A Steam támogatja az OpenID 2.0 specifikációt, így lehetővé teheted, hogy a felhasználók biztonságosan bejelentkezzenek Steam fiókjukba a weboldaladról, és lekérd a SteamID-jüket. Az OpenID Steames használatának részleteiért nézd meg az OpenID használatát.

Birtoklás-ellenőrzés

Egy felhasználó személyazonosságának ellenőrzése után egy biztonságos szerver az ISteamUser/CheckAppOwnership Web API metódussal ellenőrizni tudja, hogy a felhasználó birtokol-e egy adott AppID-t, vagy meghívhatja az ISteamUser/GetPublisherAppOwnership-et a felhasználó birtokolta összes olyan AppID listájának lekéréséhez, amelyek a megadott Web API kiadói kulcshoz vannak társítva.

Áttérés külső fél CD-kulcsairól natív Steames birtoklás-ellenőrzésekre

A Steamnek több módszere van, amelyekkel egy játék hitelesíteni tud egy felhasználót, megszüntetve a külső CD-kulcsok szükségességét. Összeállítottunk egy listát a CD-kulcsok gyakori használati eseteiről, és hogy hogyan tudod az egyes eseteket natívan megvalósítani a Steamen:

Privát fórumhozzáférés

Közvetlenül jelentkeztesd be a felhasználókat a Steam fiókjukkal OpenID használatával. Az OpenID vissza fogja adni a felhasználó 64 bites SteamID-jét, ami ezután használható az ISteamUser/CheckAppOwnership-pel annak ellenőrzésére, hogy a felhasználó birtokolja az AppID-det. További részletek fentebb, a Külső fiókok összekapcsolása Steam fiókokkal részben találhatók.

Egy játék nem Steames, DRM-mentes változatának feloldása

Használd az OpenID-t és az ISteamUser/CheckAppOwnership-et (fentebb leírva) a tartalom feloldására a saját weboldaladon. Alternatív megoldásként feltöltheted a DRM-mentes buildet választható ingyenes DLC-ként.

A szoftvert értékesítem a saját weboldalamon, és kulccsal oldódik fel

Közvetlenül jelentkeztesd be a felhasználókat a Steam fiókjukkal OpenID használatával. Az OpenID vissza fogja adni a felhasználó 64 bites SteamID-jét, ami ezután használható az ISteamUser/CheckAppOwnership-pel annak ellenőrzésére, hogy a felhasználó birtokolja az AppID-det. További részletek a fenti Külső fiókok összekapcsolása Steam fiókokkal szakaszban találhatók.

Játékbeli tárgyak dobása külső CD-kulcsod regisztrálásakor

Ha a Steam Raktár szolgáltatást használod, győződj meg róla, hogy a tárgy itemdef-je helyesen, promóciós tárgyként van konfigurálva, és hívd meg az ISteamInventory::AddPromoItem-et a kliensből.
Ha saját tárgy-háttérrendszered van, meg tudod hívni az ISteamUser::GetAuthSessionTicket-et a játékkliensből, majd használd az ISteamUserAuth/AuthenticateUserTicket-et az ISteamUser/CheckAppOwnership-pel a birtoklás ellenőrzéséhez. További információ.

A kulcs vezérli, hogy a szoftver melyik verziója van feloldva

A játékod minden verziójának saját AppID-vel kell rendelkeznie. A játékkliensből hívd meg az ISteamUser::GetAuthSessionTicket-et, majd használd az ISteamUserAuth/AuthenticateUserTicket-et az ISteamUser/CheckAppOwnership-pel a birtoklás ellenőrzéséhez. További információ.