Yleiskatsaus
Steamworks tarjoaa useita menetelmiä, joilla tarkistat Steam-käyttäjän henkilöllisyyden ja sovelluksen omistajuuden. Tässä kuvataan kaikki todennusmenetelmät, joita käytetään seuraavissa skenaarioissa:
Käyttäjän tunnistaminen Steamissä
Jokainen Steamin käyttäjä voidaan yksilöidä 64-bittisellä numeerisella tunnuksella, joka tunnetaan käyttäjän
SteamID
-tunnuksena. Steamworksin C++--ohjelmointirajapinnoissa käyttäjän SteamID-tunnus sisältyy
CSteamID-olioon. Voit palauttaa nykyisen käyttäjän SteamID-tunnuksen kutsumalla
ISteamUser::GetSteamID ja palauttaa sitten 64-bittinen tunnus kutsumalla
CSteamID.ConvertToUint64()
palautetulla arvolla.
Seuraavia todennusmenetelmiä voidaan käyttää käyttäjän Steam ID -tunnuksen turvalliseen vahvistukseen.
Tässä dokumentissa käsitellyt ohjelmointirajapinnat (API)
Istuntoliput
Istuntoliput ovat allekirjoitettuja lippuja, joiden avulla voidaan todentaa käyttäjän henkilöllisyys käyttäjän asiakasohjelman ja muiden pelien asiakasohjelmien (kuten vertaismoninpeli-istuntojen)
välillä tai kuuntelevan tai tarkoitukseen varatun pelipalvelimen välillä (käyttämällä
ISteamGameServer-ohjelmointirajapintaa). Näiden merkintöjen avulla voidaan myös varmentaa nykyisen pelin ja siihen liittyvän ladattavan sisällön omistajuus sekä määrittää, onko käyttäjä saanut VAC-kiellon. (Lisätietoja:
Valven huijauksenestojärjestelmä (VAC) ja pelikiellot)
Lisäksi
Steamworks-verkko-ohjelmointirajapintaa hyödynnettäessä käyttäjän henkilöllisyys pelin asiakasohjelman ja suojatun taustapalvelimen välillä voidaan tarkistaa istuntolippujen avulla. Tämä edellyttää, että suojattu palvelin voi tehdä HTTPS-pyyntöjä osoitteeseen
partner.steam-api.com
.
Salatut sovellusliput
Salattujen sovelluslippujen avulla voidaan tarkistaa käyttäjän identiteetti pelin asiakasohjelman ja suojatun taustapalvelimen välillä. Toisin kuin istuntolippujen tarkistaminen, salattujen sovelluslippujen tarkistaminen
ei edellytä, että suojattu palvelin pystyy tekemään HTTPS-pyyntöjä. Suojattu palvelin käyttää lipun tarkistuksessa sen sijaan C++-kirjastoa ja yksityistä, symmetristä avainta. Steamworks SDK sisältää tästä kirjastosta sekä 32-bittisen että 64-bittisen version Windows- ja Linux-käyttöjärjestelmille
public/steam/lib
-hakemistossa.
Ennen kuin käytät salattuja sovelluslippuja, sinun on luotava yksityinen avain kullekin nimikkeelle. Voit tehdä tämän navigoimalla Muokkaa Steamworks-asetuksia -sovellusasetuksiin ja valitsemalla Turvallisuus-pudotusvalikosta SDK-todennus. Tämä avain liitetään nimikkeen AppID-tunnukseen ja mahdolliseen ladattavaan sisältöön. Jotta käyttäjä saa pääsyoikeuden tähän Steamworks-osioon, hänellä pitää olla Allekirjoitusten hallinnointi -oikeudet kyseiseen sovellukseen.
HUOM! Nämä avaimet on tallennettava turvallisesti, eikä niitä saa jakaa sovelluksessa millään tavalla!
Steamworks-verkko-ohjelmointirajapinta
Steam tarjoaa HTTP-pohjaisen verkko-ohjelmointirajapinnan (Web API), jonka avulla voidaan käyttää monia Steamworksin toimintoja. Ohjelmointirajapinta sisältää julkisia metodeja, joita voidaan käyttää mistä tahansa sovelluksesta, joka pystyy tekemään HTTP-pyynnön. Tällaisia ovat mm. pelin asiakasohjelma tai pelipalvelin. API sisältää myös suojattuja metodeja, jotka edellyttävät todennusta ja joita on tarkoitus käyttää luotetuista taustasovelluksista. Lisätietoja verkko-ohjelmointirajapinnasta on
täällä.
Vertaisverkko (P2P)- tai pelipalvelimet
Istuntoliput
Käyttäjän todennus
Seuraavassa kuvataan, miten istuntolippujen avulla voidaan varmistaa käyttäjän identiteetti käyttäjän pelipalvelimen (asiakasohjelma A) ja toisen asiakasohjelman tai pelipalvelimen (asiakasohjelma B) välillä:
- Asiakasohjelma A:n on palautettava istuntolippu kutsumalla ISteamUser::GetAuthSessionTicket.
- Asiakasohjelma A:n on lähetettävä istuntolippunsa asiakasohjelma B:lle.
- Asiakasohjelma B:n on annettava asiakasohjelma A:n lippu jäsenfunktiolle ISteamUser::BeginAuthSession, joka suorittaa pikaisen kelpoisuustarkistuksen. Jos lippu on kelvollinen, ISteamUser::BeginAuthSession lähettää lipun eteenpäin Steamin taustajärjestelmään. Näin varmistetaan, että asiakasohjelma A:n tilinomistaja on myöntänyt lipun eikä sitä ole käytetty uudelleen. Tarkistuksen tulos palautetaan ISteamUser::ValidateAuthTicketResponse_t-takaisinkutsussa.
- Kun moninpeli-istunto päättyy:
Muutama tärkeä huomio istuntolipuista:
- Istuntolippuja voi käyttää vain kerran. ISteamUser::GetAuthSessionTicket pitää kutsua jokaiselle moninpeli-istunnon asiakasohjelmalle, joka pyytää lippua.
- Kun istuntolippuja käytetään pelaajien todennukseen vertaismoninpeli-istunnossa, kunkin asiakasohjelman on varmistettava kaikkien muiden moninpeli-istunnossa olevien pelin asiakasohjelmien identiteetti.
- Kun istuntolippu on käytetty, jokaisen jäsenfunktion ISteamUser::GetAuthSessionTicket palauttaman kahvan on kutsuttava ISteamUser::CancelAuthTicket.
- Kun asiakasohjelma A kutsuu ISteamUser::CancelAuthTicket, asiakasohjelma B saa ISteamUser::ValidateAuthTicketResponse_t-takaisinkutsun, jossa ilmoitetaan, että asiakasohjelman A:n lippu ei ole enää kelvollinen.
- Kun asiakasohjelma A lähtee pelistä asiakasohjelma B:n kanssa, jos asiakasohjelma A:n kutsu jäsenfunktiolle ISteamUser::CancelAuthTicket käsitellään ennen asiakasohjelman B:n kutsua jäsenfunktiolle ISteamUser::EndAuthSession, asiakasohjelma B saattaa saada ISteamUser::ValidateAuthTicketResponse_t-takaisinkutsun, jossa ilmoitetaan, että lippu on peruutettu. Koska on yhteisymmärrys siitä, että asiakasohjelma A lähtee pelistä, takaisinkutsu voidaan jättää huomiotta.
- Verkko-olosuhteet saattavat estää Steamin taustajärjestelmää toimittamasta takaisinkutsua jäsenfunktion ISteamUser::BeginAuthSession kutsujalle määrittelemättömäksi ajaksi. Jäsenfunktion ISteamUser::BeginAuthSession kutsujan (asiakasohjelma B) ei pitäisi olettaa tietävänsä asiakasohjelma A:n identiteettiä, ennen kuin tämä takaisinkutsu on vastaanotettu, vaan sen pitäisi antaa moninpeli-istunnon jatkua.
- Jos jäsenfunktion ISteamUser::BeginAuthSession kutsuja vastaanottaa ISteamUser::ValidateAuthTicketResponse_t-takaisinkutsun, jossa ilmoitetaan asiakasohjelma A:n lipun kelvottomuudesta, kutsujan on kieltäydyttävä jatkamasta moninpeli-istuntoa asiakasohjelma A:n kanssa. Kutsujan on poistuttava moninpeli-istunnosta, vaikka muut pelissä mukana olevat vertaissovellukset eivät kieltäytyisikään pelaamasta asiakasohjelma A:n kanssa.
- ISteamGameServer tarjoaa samat istuntolippumenetelmät, joilla voi suorittaa pelin asiakasohjelman ja pelipalvelimen välillä todennuksen.
Omistajuuden tarkistus
Istuntolippuja käytettäessä Steam tarkistaa automaattisesti nykyisen AppID-tunnuksen omistajuuden. Jos käyttäjä ei omista nykyistä AppID-tunnusta, niin jäsenfunktion
ISteamUser::ValidateAuthTicketResponse_t m_eAuthSessionResponse
-kentän arvoksi määritetään
k_EAuthSessionResponseNoLicenseOrExpired. Kun käyttäjän istuntolippu on vastaanotettu ja annettu jäsenfunktiolle
ISteamUser::BeginAuthSession, niin jäsenfunktion
ISteamUser::UserHasLicenseForApp avulla voidaan määrittää, omistaako käyttäjä tietyn ladattavan sisällön.
Taustapalvelin
Istuntoliput ja Steamworks-verkko-ohjelmointirajapinta
Käyttäjätodennus
Seuraavassa kuvataan, miten istuntolippujen avulla voidaan tarkistaa käyttäjän identiteetti käyttäjän pelin asiakasohjelman ja suojatun palvelimen välillä:
Omistajuuden tarkistus
Kun käyttäjän identiteetti on tarkistettu, suojattu palvelin voi tarkistaa
ISteamUser/CheckAppOwnership-verkko-ohjelmointirajapintametodin avulla, omistaako käyttäjä tietyn AppID-tunnuksen, tai kutsua
ISteamUser/GetPublisherAppOwnership saadakseen listan kaikista käyttäjän omistamista AppID-tunnuksista, jotka liittyvät annettuun
julkaisijan avaimeen.
Salatut sovellusliput
Käyttäjän todennus
Seuraavassa kuvataan, miten salattujen istuntolippujen avulla voidaan tarkistaa käyttäjän identiteetti käyttäjän pelin asiakasohjelman ja suojatun palvelimen välillä:
Esimerkki toteutuksesta on nähtävissä
Steamworks-ohjelmointirajapinnan esimerkkisovellus (SpaceWar) -projektissa SDK:ssa. Erityisesti
CSpaceWarClient::RetrieveEncryptedAppTicket
ja
CSpaceWarClient::OnRequestEncryptedAppTicket
.
Omistajuuden tarkistus
Steam luo salattuja sovelluslippuja vain käyttäjille, jotka omistavat AppID-tunnuksen, jolle lippu luotiin. Kun suojattu palvelin on purkanut salatun sovelluslipun suojauksen, se voi varmistaa
SteamEncryptedAppTicket::BIsTicketForApp-funktion avulla, että lipun AppID-tunnus vastaa nimikkeen AppID-tunnusta. Palvelin voi käyttää myös
SteamEncryptedAppTicket::BUserOwnsAppInTicket-funktiota määrittääkseen, onko käyttäjän omistuksessa tietty
Lisämateriaali (DLC).
Selainpohjainen todennus OpenID:lla
Steam on
OpenID-tarjoaja, kuten OpenID 2.0 -määrityksessä kuvattiin. Kolmannen osapuolen verkkosivusto voi hankkia OpenID:n avulla käyttäjän SteamID-tunnuksen, jota voidaan käyttää kirjautumisen tunnistetietoina kolmannen osapuolen verkkosivustolla tai linkitettynä verkkosivuston olemassa olevaan tiliin.
OpenID:ta käytettäessä käyttäjä aloittaa selaimessa kolmannen osapuolen sivustolla. Kun käyttäjä haluaa kirjautua tai linkittää tilinsä verkkosivustoon käyttämällä OpenID:ta, sivusto ohjaa käyttäjän Steam-yhteisön verkkosivuston kirjautumislomakkeeseen. Kun käyttäjä on syöttänyt Steam-kirjautumisen tunnistetietonsa, käyttäjän selain ohjataan automaattisesti takaisin kolmannen osapuolen sivustoon, ja palautus-URL-osoitteeseen on lisätty erityisiä OpenID-tietoja. Sivuston OpenID-kirjasto voi tarkistaa ja hankkia käyttäjän SteamID-tunnuksen näiden tietojen avulla.
Steam tarjoaa seuraavat kuvat, joita voidaan käyttää kolmannen osapuolen sivustoilla, kun linkitetään Steamin sisäänkirjautumissivulle:
Käyttäjätodennus
Steamin OpenID 2.0 -toteutuksen avulla voidaan linkittää käyttäjän Steam-tili kolmannen osapuolen sivustossa olevaan tiliin.
Lista avoimen lähdekoodin OpenID-kirjastoista löytyy
OpenID-sivustolta. Käyttäjän identiteetin tarkistaminen OpenID:n avulla:
- Määritä OpenID-kirjasto seuraavan URL-osoitteen käyttämiseksi Steamin OP Endpoint -url-osoitteena:
https://steamcommunity.com/openid/
- Kun käyttäjä on todennettu, Claimed ID -tunnus sisältää käyttäjän SteamID-tunnuksen. Steamin Claimed ID -muoto on kuvattu osoitteessa:
http://steamcommunity.com/openid/id/<steamid>
.
Omistajuuden tarkistus
Kun käyttäjän identiteetti on tarkistettu, suojattu palvelin voi tarkistaa
ISteamUser/CheckAppOwnership-verkko-ohjelmointirajapintametodin avulla, omistaako käyttäjä tietyn AppID-tunnuksen, tai kutsua
ISteamUser/GetPublisherAppOwnership palauttaakseen listan kaikista käyttäjän omistamista AppID-tunnuksista, jotka liittyvät annettuun
verkko-ohjelmointirajapinnan julkaisijan avaimeen.
Esimerkkejä
Kolmannen osapuolen tilien linkittäminen Steam-tileihin
Kolmannen osapuolen tilit voi linkittää Steam-tileihin liittämällä käyttäjän SteamID:n kolmannen osapuolen tiliin.
Käyttäjän SteamID:n voi palauttaa turvallisesti joko pelissä tai selaimen kautta, ja kun ensimmäinen liitos on tapahtunut, voit turvallisesti sallia pääsyn kolmannen osapuolen tilille tarkistamalla vain käyttäjän SteamID:n. Tämän ansiosta Steamin käyttäjien ei tarvitse tehdä minkäänlaisia toissijaisia kirjautumisia kolmannen osapuolen tilijärjestelmiin. Lisäksi jos kolmannen osapuolen tilit voi luoda automaattisesti ja linkittää, kun havaitaan uusi SteamID-tunnus, Steamin käyttäjän ei tarvitse koskaan olla tietoinen siitä, että toissijaista todennusta ylipäätään tehdään. Käyttäjän yksi ja ainoa Steam-tili voi myöntää pääsyn käyttäjän kaikkiin peleihin, mikä virtaviivaistaa käyttäjäkokemusta ja poistaa mahdolliset esteet asentaa ja kokeilla uusia pelejä.
Pelin sisältä linkittäminen
Istuntolippujen avulla voi tarkistaa käyttäjän identiteetin pelin asiakasohjelman ja suojatun taustapalvelimen välillä käyttämällä Steamworks-verkko-ohjelmointirajapintaa:
Selaimesta linkittäminen
Steam tukee OpenID 2.0 -määritystä, jotta voit antaa käyttäjien kirjautua turvallisesti Steam-tileilleen verkkosivustoltasi ja noutaa SteamID-tunnuksensa. Lisätietoja OpenID:n käyttämisestä Steamin kanssa on kohdassa
OpenID:n käyttäminenOmistajuuden tarkistus
Kun käyttäjän identiteetti on tarkistettu, suojattu palvelin voi tarkistaa
ISteamUser/CheckAppOwnership-verkko-ohjelmointirajapintametodin avulla, omistaako käyttäjä tietyn AppID-tunnuksen, tai kutsua
ISteamUser/GetPublisherAppOwnership saadakseen listan kaikista käyttäjän omistamista AppID-tunnuksista, jotka liittyvät annettuun
verkko-ohjelmointirajapinnan julkaisijan avaimeen.
Siirtyminen kolmannen osapuolen tuotetunnuksista natiiveihin Steamin omistajuustarkistuksiin
Steamissa itsessään on useita tapoja, joilla nimike voi todentaa käyttäjän, jolloin kolmannen osapuolen tuotetunnusta ei tarvita. Olemme koonneet listan yleisistä tuotetunnusten käyttötapauksista ja niiden toteuttamisesta natiivisti Steamillä:
Yksityisen keskustelupalstan käyttö
Sinun kannaltasi olisi hyvä, jos käyttäjät kirjautuvat suoraan Steam-tilillä käyttämällä OpenID:ta. OpenID palauttaa käyttäjän 64-bittisen SteamID-tunnuksen, jonka avulla voidaan tarkistaa, että käyttäjä omistaa AppID-tunnuksen, käyttämällä
ISteamUser/CheckAppOwnership. Lisätietoja on edellä olevassa kohdassa
Kolmannen osapuolen tilien linkittäminen Steam-tileihin.
Muun kuin Steamin pelin koontiversion avaaminen riittävillä käyttöoikeuksilla (DRM-free build)
Avaa oman sivustosi sisältö käyttämällä OpenID:ta ja kutsua
ISteamUser/CheckAppOwnership (
dokumentoitu edellä). Voit myös lähettää DRM-tekniikkaa sisältämättömän kokoonpanon valinnaisena, ilmaisena lisämateriaalina.
Ohjelmistoa myydään verkkosivustollani, ja se avataan tuotetunnuksella
Sinun kannaltasi olisi hyvä, jos käyttäjät kirjautuvat suoraan Steam-tilillä käyttämällä OpenID:ta. OpenID palauttaa käyttäjän 64-bittisen SteamID-tunnuksen, jonka avulla voidaan tarkistaa, että käyttäjä omistaa AppID-tunnuksen, käyttämällä
ISteamUser/CheckAppOwnership. Lisätietoja on edellä olevassa kohdassa
Kolmannen osapuolen tilien linkittäminen Steam-tileihin.
Pelinsisäisten esineiden myöntäminen kolmannen osapuolen tuotetunnuksen rekisteröimiseksi
Jos käytät
Steamin tavaraluettelopalvelua, varmista, että esineiden itemdef on määritetty oikein promokohteeksi, ja kutsu
ISteamInventory::AddPromoItem asiakasohjelmasta.
Jos käytät omaa esineiden taustajärjestelmää, voit kutsua
ISteamUser::GetAuthSessionTicket pelin asiakasohjelmasta ja varmistaa sitten omistajuuden käyttämällä
ISteamUserAuth/AuthenticateUserTicket ja
ISteamUser/CheckAppOwnership.
Lisätietoja...Tuotetunnus määrittää, mikä ohjelmistoversio avataan
Jokaisella pelisi versiolla on oltava oma AppID-tunnuksensa. Kutsu
ISteamUser::GetAuthSessionTicket pelin asiakasohjelmasta ja varmista sitten omistajuus käyttämällä
ISteamUserAuth/AuthenticateUserTicket ja
ISteamUser/CheckAppOwnership.
Lisätietoja...