Steamworks-dokumentaatio
Käyttäjän todennus ja omistajuus

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ä:

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:
sits_large_border.png

sits_large_noborder.png

sits_small.png

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äminen

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 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...