Steamworks-dokumentasjon
Autentisering av brukere og eierskap

Oversikt

Steamworks har flere metoder for å verifisere en Steam-brukers identitet og verifisere eierskap av en applikasjon. Dette dokumentet beskriver hver av disse autentiseringsmetodene som brukes i følgende situasjoner:

Slik identifiseres en bruker på Steam

Hver bruker på Steam kan identifiseres med en unik 64-biters numerisk ID, kjent som brukerens Steam-ID. I Steamworks' C++-API-er finnes en brukers Steam-ID inni et objekt av typen CSteamID. Du kan hente den aktuelle brukerens Steam-ID ved å kalle ISteamUser::GetSteamID og så hente den 64-biters ID-en ved å kalle CSteamID.ConvertToUint64() på verdien som returneres.

Følgende autentiseringsmetoder kan brukes for å trygt verifisere en brukers Steam-ID.

API-er som beskrives i dette dokumentet

Øktbilletter

Øktbiletter er signerte billetter som kan brukes for å bekrefte en brukeres identitet mellom brukerens spillklient og eventuelle andre spillklienter (som ved en flerspillerøkt som foregår over noder), eller til en spilltjenere (ved bruk av API-et ISteamGameServer). Disse billettene kan brukes for å bekrefte eierskap av det aktuelle spillet og tilknyttet nedlastbart innhold, og også for å avgjøre om brukeren er blitt utestengt av VAC (se Antijuks og spillutestengelser).
Øktbilletter kan også brukes for å bekrefte at en brukers identitet mellom en spillklient og en sikret tjener bruker nett-API-et til Steamworks. Krever at en sikret tjener kan utføre HTTPS-forespørsler til parnter.steam-api.com.

Krypterte applikasjonsbilletter

Krypterte applikasjonsbilletter kan brukes for å bekrefte en brukers identitet mellom en spillklient og en sikret tjener. Til forskjell fra øktbilletter, så krever ikke verifisering av krypterte applikasjonsbilletter at den sikrede tjeneren kan utføre HTTPS-forespørsler. Istedenfor brukes et C++-bibliotek og en privat, symmetrisk nøkkel av den sikrede tjeneren for å bekrefte billetten. Steamworks' SDK inkluderer 32-biters- og 64-biters versjoner av dette biblioteket for Windows og Linux i mappen public/steam/lib.

Før du bruker krypterte applikasjonsbilletter, må du generere en privat nøkkel for hvert spill. Du kan gjøre dette ved å gå til innstillinger i Steamworks for applikasjonen og så velge «SDK-autentisering» fra sikkerhetsmenyen. Denne nøkkelen knyttes til spillets app-ID, og eventuelt nedlastbart innhold for spillet. For å få tilgang til denne seksjonen i Steamworks, så må en bruker ha tillatelse til å «Behandle signering» for den aktuelle applikasjonen.
MERK: Disse nøklene må lagres trygt, og må ikke distribueres inni applikasjonen på noen som helst måte!

Steamworks' nett-API

Steam eksponerer et nett-API basert på HTTP som kan brukes for å få tilgang til mange funksjoner i Steamworks. API-et inneholder offentlige metoder som er tilgjengelige for enhver applikasjon som kan utføre en HTTP-forespørsel, slik som spillklienter eller -tjenere. API-et inneholder også beskyttede metoder som krever autentisering og har til hensikt å brukes av klarerte bakapplikasjoner. Mer informasjon om nett-API-et finnes her.

Node-til-node eller spilltjenere

Øktbilletter

Autentisering av brukere

Følgende steg beskriver hvordan man bruker øktbilletter til å bekrefte en brukes identitet mellom brukerens spillklient (klient A) og en annen klient eller spilltjener (klient B):

Noen viktige merknader om øktbilletter:

Bekrefting av eierskap

Ved bruk av øktbilletter, så kan Steam automatisk bekrefte eierskap av den aktuelle app-ID-en. Hvis brukeren ikke eier den aktuelle app-ID-en, så angis feltet m_eAuthSessionResponse i ISteamUser::ValidateAuthTicketResponse_t til k_EAuthSessionResponseNoLicenseOrExpired. Etter å ha mottatt en brukers øktbillett og sendt den til ISteamUser::BeginAuthSession, så kan ISteamUser::UserHasLicenseForApp brukes for å avgjøre om en bruker eier spesifikt nedlastbart innhold.

Tjener

Øktbilletter og Steamworks' nett-API

Autentisering av brukere

Følgende steg beskriver hvordan man bruker øktbilletter for å bekrefte en brukers identitet mellom en spillklient og en sikker tjener:

Bekrefting av eierskap

Når en brukers identitet er blitt bekreftet, så kan en sikker tjener bruke nett-API-metoden ISteamUser/CheckAppOwnership for å sjekke om brukerens eier en spesifikk app-ID, eller kaller ISteamUser/GetPublisherAppOwnership for å hente en liste over alle app-ID-er brukeren eier som er tilknyttet utgivernøkkelen.

Krypterte applikasjonsbilletter

Autentisering av brukere

Følgende steg beskriver hvordan man bruker krypterte applikasjonsbilletter for å bekrefte en brukers identitet mellom en spillklient og en sikker tjener:

Et eksempel på implementasjon finnes i prosjektet Steamworks API Example Application (SpaceWar) i SDK-et. Spesifikt CSpaceWarClient::RetrieveEncryptedAppTicket og CSpaceWarClient::OnRequestEncryptedAppTicket.

Bekrefting av eierskap

Steam oppretter kun krypterte applikasjonsbilletter for brukere som eier app-ID-en som billetten ble opprettet for. Etter dekryptering av en kryptert applikasjonsbillett kan den sikre tjeneren bruke SteamEncryptedAppTicket::BIsTicketForApp for å bekrefte at app-ID-en til billetten samsvarer med spillets app-ID. Tjeneren kan også bruke SteamEncryptedAppTicket::BUserOwnsAppInTicket for å avgjøre om brukeren eier spesifikt Nedlastbart innhold (DLC).

Nettleserbasert autentisering med OpenID

Steam er en leverandør av OpenID, som beskrevet i spesifikasjonen til OpenID 2.0. Inni en nettleser så kan nettsidene til tredjeparter bruke OpenID for å hente en brukers SteamID, som kan brukes til innlogging på nettsiden til tredjeparten, eller knyttes til en eksisterende konto på nettsiden.

Ved bruk av OpenID, så begynner en bruker i en nettleser på en nettside som drives av en tredjepart. Når brukeren har lyst til å logge inn/tilknytte kontoen til nettsiden ved bruk av OpenID, så retter nettsiden brukeren mot et innloggingsskjema på nettsiden til Steam-samfunnet. Når brukeren har angitt innloggingsopplysningene sine på Steam, så omdirigeres brukerens nettleser automatisk tilbake til en nettsiden til tredjeparten med noe ytterligere data som er spesifikk for OpenID lagt til på slutten av nettadressen. Nettsidens OpenID-bibliotek kan da bruke disse dataene for å bekrefte og hente brukerens Steam-ID.

Steam leverer følgende bilder som kan brukes av tredjepartssider ved tilknytting til Steams innloggingsside:
sits_large_border.png

sits_large_noborder.png

sits_small.png

Autentisering av brukere

Steams implementasjon av OpenID 2.0 kan brukes for å tilknytte en brukers Steam-konto til kontoer på nettsider til tredjeparter.
En liste over OpenID-bibliotek med åpen kildekode finnes på nettsiden til OpenID. Slik bruker du OpenID for å bekrefte en brukers identitet:
  • Konfigurer OpenID-biblioteket ditt til å bruke følgende nettadresse som Steams sluttpunkt: https://steamcommunity.com/openid/
  • Etter at en bruker er autentisert, så inneholder den hevdede ID-en brukerens SteamID. Formatet på hevdet ID på Steam er http://steamcommunity.com/openid/id/<steamid>.

Bekrefting av eierskap

Når en brukers identitet er blitt bekreftet, så kan en sikker tjener bruke nett-API-metoden ISteamUser/CheckAppOwnership for å sjekke om brukerens eier en spesifikk app-ID, eller kaller ISteamUser/GetPublisherAppOwnership for å hente en liste over alle app-ID-er brukeren eier som er tilknyttet utgivernøkkelen.

Eksempler

Tilknytting av tredjepartskontoer til Steam-kontoer

Tredjepartskontoer kan tilknytter Steam-kontoer ved å tilknytte en brukers Steam-ID med tredjepartskontoen.

En brukers Steam-ID kan hentes på en sikker måte enten i et spill eller gjennom en nettleser når den innledende tilknyttingen har funnet sted. Du kan trygt gi tilgang til tredjepartskontoen kun ved å bekrefte en brukers Steam-ID. Dette gjør at brukere på Steam ikke trenger å utføre noe slags sekundær innlogging til systemer for tredjepartskontoer. Hvis nye tredjepartskontoer kan opprettes og tilknyttes automatisk når en ny SteamID støtes på, så trenger ikke brukeren å være klar over at sekundær autentisering finner sted i det hele tatt. Istedenfor så kan Steam-kontoen gi tilgang til alle spillene for å gjøre brukeropplevelsen bedre, og fjerne hinder for installering og prøving av nye spill.

Tilknytting fra inni spillet

Øktbilletter kan brukes for å bekrefte en brukers identitet mellom en spillklient og en sikker tjenerdel, gjennom nett-API-et til Steamworks:

Tilknytting fra en nettleser

Steam støtter spesifikasjonen OpenID 2.0 som gjør det mulig for brukere å logge inn på Steam-kontoene sine på en sikker måte fra nettsiden din for å hente SteamID. For informasjon om hvordan man bruker OpenID med Steam, gå til bruk av OpenID.

Bekrefting av eierskap

Når en brukers identitet er bekreftet, så kan den sikre tjeneren bruke nett-API-metoden ISteamUser/CheckAppOwnership for å sjekke om brukeren eier en gitt app-ID eller kaller ISteamUser/GetPublisherAppOwnership for å hente en liste over alle app-ID-er en bruker eier som er tilknyttet den oppgitte utgivernøkkelen i nett-API-et.

Overføring av CD-nøkler fra tredjepart til innebygget sjekk av eierskap på Steam

Steam har flere innebygde metoder for å autentisere en bruker, som gjør at man ikke trenger å bruke CD-nøkkel fra en tredjepart. Vi har satt sammen en liste over vanlige brukstilfeller for CD-nøkler og hvordan du kan implementere hvert tilfelle med Steam:

Tilgang til private forum

Brukere må logge seg inn direkte med Steam-kontoene sine ved bruk av OpenID. OpenID returnerer brukerens 64-biters Steam-ID, som kan brukes sammen med ISteamUser/CheckAppOwnership for å bekrefte at brukeren eier app-ID-en. Mer informasjon finnes ovenfor om tilknytting av tredjepartskontoer til Steam-kontoer.

Opplåsing av en DRA-fri versjon av spillet som ikke er på Steam

Bruk OpenID og ISteamUser/CheckAppOwnership (dokumentert ovenfor) for å låse opp innholdet på ditt eget nettsted. Alternativt så kan du laste opp en byggversjon som er fri for DRA som valgfritt og gratis nedlastbart innhold.

Programvaren selges på min egen nettside og låses opp med en nøkkel

Brukere må logge seg inn direkte med Steam-kontoene sine ved bruk av OpenID. OpenID returnerer brukerens 64-biters Steam-ID, som kan brukes sammen med ISteamUser/CheckAppOwnership for å bekrefte at brukeren eier app-ID-en. Mer informasjon finnes i Tilknytting av tredjepartskontoer til Steam-kontoer ovenfor.

Slipp av gjenstander i spillet for registrering av tredjepartsnøkkel

Hvis du bruker Steams lagertjeneste, sørg for at gjenstandens itemdef er konfigurert ordentlig som en kampanjegjenstand, og kall ISteamInventory::AddPromoItem fra klienten.
Hvis du har din egen tjenerdel for gjenstander, kan du kalle ISteamUser::GetAuthSessionTicket fra spillklienten og så bruke ISteamUserAuth/AuthenticateUserTicket sammen med ISteamUser/CheckAppOwnership for å bekrefte eierskap. Mer informasjon …

Nøkkelen kontrollerer hvilken versjon av programvaren som låses opp

Hver versjon av spillet bør ha sin egen app-ID. Kall ISteamUser::GetAuthSessionTicket fra spillklienten, og bruk så ISteamUserAuth/AuthenticateUserTicket sammen med ISteamUser/CheckAppOwnership for å bekrefte eierskap. Mer informasjon …