Steamworks-Dokumentation
Benutzerauthentifizierung und Eigentum

Übersicht

Steamworks stellt mehrere Methoden bereit, um die Identität eines Steam-Nutzers und die Eigentumsrechte für eine Anwendung zu verifizieren. Diese Dokumentation beschreibt jede dieser Authentifizierungsmethoden, die in folgenden Szenarien angewendet werden:

Nutzer in Steam identifizieren

Jeder Steam-Nutzer kann anhand einer 64-stelligen numerischen ID, auch bekannt als Steam-ID, eindeutig identifiziert werden. In den APIs von Steamworks C++ ist die Steam-ID eines Benutzers als CSteamID-Objekt enthalten. Sie können die Steam-ID des aktuellen Benutzers abrufen, indem Sie erst ISteamUser::GetSteamID und anschließend die 64-Bit-ID durch Aufrufen von CSteamID.ConvertToUint64() aufrufen.

Mit den folgenden Authentifizierungsmethoden können Sie die Steam-ID eines Nutzers zuverlässig verifizieren.

In dieser Dokumentation behandelte APIs

Sitzungstickets

Sitzungstickets sind signierte Tickets, mit denen Sie die Identität eines Nutzers zwischen dessen Spiel-Client und einer beliebigen Anzahl anderer Spiel-Clients (zum Beispiel in einer Peer-to-Peer-Mehrspielersitzung) oder einem Listen-/dedizierten Spielserver (über die ISteamGameServer-API) verifizieren können. Außerdem können Sie mit diesen Tickets die Eigentumsrechte für das aktuelle Spiel und die zugehörigen Zusatzinhalte verifizieren und ermitteln, ob der Benutzer durch VAC ausgeschlossen wurde (siehe VAC- (Valve Anti-Cheat) und Spielausschlüsse).
Mit Sitzungstickets können Sie ferner über die Steamworks-Web-API die Identität eines Benutzers zwischen einem Spiel-Client und einem gesicherten Backend-Server verifizieren. Hierfür muss der gesicherte Server HTTPS-Anfragen an partner.steam-api.com senden können.

Verschlüsselte Anwendungstickets

Mit verschlüsselten Anwendungstickets können Sie die Identität eines Nutzers zwischen einem Spiel-Client und einem gesicherten Backend-Server verifizieren. Anders als bei Sitzungstickets ist es bei verschlüsselten Anwendungstickets nicht erforderlich, dass der gesicherte Server HTTPS-Anfragen senden kann. Stattdessen verifiziert der gesicherte Server das Ticket anhand einer C++-Bibliothek und eines privaten, symmetrischen Schlüssels. Das Steamworks-SDK enthält 32-Bit- und 64-Bit-Versionen dieser Bibliothek für Windows und Linux im Verzeichnis public/steam/lib.
Bevor Sie verschlüsselte Anwendungstickets verwenden können, müssen Sie für jeden Titel einen privaten Schlüssel generieren. Navigieren Sie hierfür zu  „Steamworks-Einstellungen bearbeiten“ für Ihre Anwendung und wählen Sie im Dropdown-Menü  „Sicherheit“ die Option  „SDK-Authentifikation “. Der Schlüssel wird mit der App-ID für Ihren Titel und allen zugehörigen Zusatzinhalten verknüpft.

HINWEIS: Diese Schlüssel müssen sicher verwahrt werden und dürfen keinesfalls in irgendeiner Form mit Ihrer Anwendung weitergegeben werden!

Steamworks-Web-API

Steam stellt eine HTTP-basierte Web-API bereit, mit der Sie auf viele Steamworks-Funktionen zugreifen können. Die API umfasst öffentliche Methoden, die aus jeder Anwendung erreichbar sind, die HTTP-Anfragen senden kann, zum Beispiel Spiel-Clients oder Spielserver. Außerdem enthält die API geschützte Methoden, die eine Authentifizierung erfordern und nur von vertrauenswürdigen Backend-Anwendungen aufgerufen werden sollen. Weitere Informationen zur Web-API finden Sie im hier.

P2P- oder Spielserver

Sitzungstickets

Nutzerauthentifizierung

In den folgenden Schritten wird erläutert, wie Sie Sitzungstickets verwenden, um die Identität eines Nutzers zwischen dem Spiel-Client des Nutzers (Client A) und einem anderen Client oder Spielserver (Client B) zu verifizieren:

Einige wichtige Hinweise zu Sitzungstickets:
  • Sitzungstickets dürfen nur einmal verwendet werden. ISteamUser::GetAuthSessionTicket muss für jeden Client in der Mehrspielersitzung aufgerufen werden, der ein Ticket anfordert.
  • Wenn das Ticket zur Authentifizierung von Spielern innerhalb einer Peer-to-Peer-Mehrspielersitzung verwendet wird, sollte jeder Spiel-Client die Identität aller anderen Spiel-Clients in der Mehrspielersitzung verifizieren.
  • Wenn das Sitzungsticket beendet wird, muss ISteamUser::CancelAuthTicket für jeden von ISteamUser::GetAuthSessionTicket zurückgegebenen Handle aufgerufen werden.
  • Wenn Client A ISteamUser::CancelAuthTicket aufruft, empfängt Client B einen ISteamUser::ValidateAuthTicketResponse_t-Rückruf, der besagt, dass das Ticket von Client A nicht mehr gültig ist.
  • Wenn Client A das Spiel mit Client B verlässt und der Aufruf von ISteamUser::CancelAuthTicket durch Client A verarbeitet wird, bevor Client B ISteamUser::EndAuthSession aufruft, empfängt Client B möglicherweise einen ISteamUser::ValidateAuthTicketResponse_t-Rückruf, der besagt, dass das Ticket storniert wurde. Da aber beide zustimmen, dass Client A die Sitzung verlässt, kann dieser Rückruf ignoriert werden.
  • Je nach Netzwerkstatus ist es möglicherweise auf unbestimmte Zeit nicht möglich, dass das Steam-Backend ein Rückruf an den Client sendet, der ISteamUser::BeginAuthSession aufgerufen hat. Der aufrufende Client von ISteamUser::BeginAuthSession (Client B) darf nicht annehmen, die wahre Identität von Client A zu kennen, bis dessen Rückruf empfangen wurde, sollte aber die Fortsetzung der Mehrspielersitzung zulassen.
  • Wenn der aufrufende Client von ISteamUser::BeginAuthSession eine ISteamUser::ValidateAuthTicketResponse_t-Rückruf empfängt, die besagt, dass das Ticket für Client A ungültig ist, muss der aufrufende Client das Fortsetzen der Mehrspielersitzung mit Client A ablehnen. Wenn die anderen Peers im Spiel die Sitzung mit Client A nicht ebenfalls ablehnen, sollte der aufrufende Client die Mehrspielersitzung verlassen.
  • ISteamGameServer bietet dieselben Sitzungsticket-Methoden zur Authentifizierung zwischen einem Spiel-Client und einem Spielserver.

Eigentumsprüfung

Bei Verwendung von Sitzungstickets verifiziert Steam automatisch die Eigentumsrechte für die aktuelle App-ID. Wenn der Benutzer nicht Eigentümer der aktuellen App-ID ist, wird das Feld m_eAuthSessionResponse von ISteamUser::ValidateAuthTicketResponse_t auf k_EAuthSessionResponseNoLicenseOrExpired gesetzt. Nachdem das Sitzungsticket eines Benutzers empfangen und an ISteamUser::BeginAuthSession übergeben wurde, können Sie mit ISteamUser::UserHasLicenseForApp ermitteln, ob der Benutzer einen bestimmten Zusatzinhalt besitzt.

Backend-Server

Sitzungstickets und die Steamworks-Web-API

Nutzerauthentifizierung

In den folgenden Schritten wird erläutert, wie Sie Sitzungstickets verwenden, um die Identität eines Nutzers zwischen dem Spiel-Client des Nutzers und einem gesicherten Server zu verifizieren:
  • Der Client muss durch Aufrufen von ISteamUser::GetAuthSessionTicket ein Sitzungsticket abrufen.
  • Damit die Gültigkeit des Tickets garantiert ist, muss der Client auf den ISteamUser::GetAuthSessionTicketResponse_t-Rückruf warten.
  • Der Client muss sein Sitzungsticket an den gesicherten Server senden.
  • Der gesicherte Server muss eine HTTPS-Anfrage an partner.steam-api.com senden und die Webmethode ISteamUserAuth/AuthenticateUserTicket aufrufen, in der das Sitzungsticket des Benutzers als hexcodierte UTF-8-Zeichenfolge übergeben wird. Bedenken Sie bitte, dass diese Methode entweder einen Steam-Web-API-Schlüssel oder einen Web-API-Publisher-Schlüssel erlaubt, der mit der App-ID des angegebenen Tickets in Verbindung steht. Eine zukünftige Aktualisierung dieser API könnte einem aufrufenden Client weitere Informationen zurückgeben, wenn ein Web-API-Publisher-Schlüssel bereitgestellt wird.
  • Wenn das Ticket des Benutzers gültig ist, gibt ISteamUserAuth/AuthenticateUserTicket die 64-Bit-Steam-ID des Benutzers zurück.

Eigentumsprüfung

Sobald die Identität eines Benutzers verifiziert wurde, kann ein gesicherter Server mit der ISteamUser/CheckAppOwnership-Web-API-Methode prüfen, ob der Benutzer Eigentümer einer bestimmten App-ID ist, oder ISteamUser/GetPublisherAppOwnership aufrufen, um eine Liste aller App-IDs im Eigentum des Benutzers abzurufen, die mit dem angegebenen Publisher-Schlüssel verknüpft sind.

Verschlüsselte Anwendungstickets

Nutzerauthentifizierung

In den folgenden Schritten wird erläutert, wie Sie verschlüsselte Anwendungstickets verwenden, um die Identität eines Nutzers zwischen dem Spiel-Client des Nutzers und einem gesicherten Server zu verifizieren:

Eine Beispielimplementierung finden Sie im Projekt Steamworks API Example Application (SpaceWar) des SDK. Insbesondere CSpaceWarClient::RetrieveEncryptedAppTicket und CSpaceWarClient::OnRequestEncryptedAppTicket.

Eigentumsprüfung

Steam erstellt verschlüsselte Anwendungstickets nur für Nutzer, die Eigentümer der App-ID sind, für die das Ticket erstellt wurde. Nach der Entschlüsselung eines verschlüsselten Anwendungstickets kann der gesicherte Server mit SteamEncryptedAppTicket::BIsTicketForApp verifizieren, ob die App-ID des Tickets mit der App-ID des Titels übereinstimmt. Außerdem kann der Server mit SteamEncryptedAppTicket::BUserOwnsAppInTicket ermitteln, ob der Benutzer bestimmte Zusatzinhalte (DLC) besitzt.

Webbrowser-basierte Authentifizierung mit OpenID

Steam ist OpenID-Provider gemäß der OpenID 2.0-Spezifikation. Drittanbieterwebsites können in einem Webbrowser OpenID verwenden, um die Steam-ID eines Nutzers abzurufen und sie als Anmeldedaten für die Drittanbieterwebsite verwenden oder mit einem bestehenden Account auf dieser Website verknüpfen.

Bei Verwendung von OpenID startet der Nutzer im Webbrowser auf der Drittanbieterwebsite. Wenn der Nutzer sich mit OpenID bei dieser Website anmelden oder seinen Account damit verknüpfen möchte, wird der Nutzer auf ein Anmeldeformular auf der Steam-Communitywebsite umgeleitet. Sobald der Nutzer seine Steam-Anmeldedaten eingegeben hat, wird der Webbrowser des Nutzers automatisch auf die Drittanbieterwebsite zurückgeleitet, wobei einige OpenID-spezifische Daten an die Rückgabe-URL angehängt werden. Anhand dieser Daten kann die OpenID-Bibliothek der Website dann die Steam-ID des Nutzers verifizieren und abrufen.

Steam stellt folgende Grafiken bereit, die von Drittanbieter-Websites für Links zur Anmeldeseite von Steam verwendet werden können:
sits_large_border.png

sits_large_noborder.png

sits_small.png

Nutzerauthentifizierung

Mit der OpenID 2.0-Implementierung von Steam kann der Steam-Account eines Benutzers mit dessen Account für die Drittanbieter-Website verknüpft werden.
Eine Liste von Open Source-OpenID-Bibliotheken finden Sie auf der OpenID-Website. So verifizieren Sie die Identität eines Benutzers mit OpenID:
  • Konfigurieren Sie Ihre OpenID-Bibliothek so, dass folgende URL als OP-Endpunkt-URL für Steam verwendet wird: https://steamcommunity.com/openid/
  • Nach der Benutzerauthentifizierung enthält die Claimed-ID des Benutzers seine Steam-ID. Das Format der Steam Claimed-ID lautet: http://steamcommunity.com/openid/id/<steamid>.

Eigentumsprüfung

Sobald die Identität eines Benutzers verifiziert wurde, kann ein gesicherter Server mit der ISteamUser/CheckAppOwnership-Web-API-Methode prüfen, ob der Benutzer Eigentümer einer bestimmten App-ID ist, oder ISteamUser/GetPublisherAppOwnership aufrufen, um eine Liste aller App-IDs im Eigentum des Benutzers abzurufen, die mit dem angegebenen Web-API-Publisher-Schlüssel verknüpft sind.

Beispiele

Drittanbieteraccounts mit Steam-Accounts verknüpfen

Drittanbieteraccounts können mit Steam-Accounts verknüpft werden, indem die Steam-ID eines Nutzers mit dem Drittanbieteraccount verknüpft wird.

Die Steam-ID eines Nutzers kann sicher aus dem Spiel heraus oder über einen Webbrowser abgerufen werden. Sobald die erstmalige Verknüpfung erfolgt ist, können Sie bedenkenlos den Zugriff auf den Drittanbieteraccount erlauben, indem Sie einfach die Steam-ID des Nutzers verifizieren. Dadurch müssen sich Steam-Nutzer nicht ein zweites Mal bei Accountsystemen von Drittanbietern anmelden. Und wenn neue Drittanbieteraccounts automatisch erstellt und verknüpft werden, wenn eine neue Steam-ID auftaucht, wird der Steam-Benutzer gar nicht mehr merken, dass überhaupt eine zweite Authentifizierung stattfindet. Stattdessen kann er allein mit seinem Steam-Account auf alle seine Spiele zugreifen, was die Benutzererfahrung optimiert und potenzielle Hindernisse für die Installation und das Ausprobieren neuer Spiele abbaut.

Verknüpfungen aus dem Spiel heraus

Mit Sitzungstickets können Sie über die Steamworks-Web-API die Identität eines Nutzers zwischen einem Spiel-Client und einem gesicherten Backend-Server verifizieren.

Verknüpfungen aus einen Webbrowser

Steam unterstützt die OpenID 2.0-Spezifikation. So können sich Benutzer sicher über Ihre Website bei ihrem Steam-Account anmelden und Sie können ihre Steam-ID abrufen. Ausführliche Informationen zur Verwendung von OpenID mit Steam finden Sie unter Verwendung von OpenID.

Eigentumsprüfung

Sobald die Identität eines Benutzers verifiziert wurde, kann ein gesicherter Server mit derISteamUser/CheckAppOwnership-Web-API-Methode prüfen, ob der Benutzer Eigentümer einer bestimmten App-ID ist, oder ISteamUser/GetPublisherAppOwnership aufrufen, um eine Liste aller App-IDs im Eigentum des Benutzers abzurufen, die mit dem angegebenen Web-API-Publisher-Schlüssel verknüpft sind.

Umstellen von Produktschlüsseln von Drittanbietern auf native Steam-Eigentumsprüfungen

Steam selbst bietet eine Reihe von Methoden, mit denen ein Titel Benutzer authentifizieren kann, sodass keine Produktschlüssel von Drittanbietern mehr erforderlich sind. Wir haben eine Liste zusammengestellt, in der häufige Anwendungsbeispiele von Produktschlüsseln und die Methoden beschrieben werden, wie Sie diese Beispiele auch nativ in Steam lösen können:

Zugang zu privaten Foren

Sie möchten, dass Benutzer sich über OpenID direkt mit ihrem Steam-Account anmelden können. OpenID gibt die 64-Bit-Steam-ID des Benutzers zurück, mit deren Hilfe Sie über ISteamUser/CheckAppOwnership verifizieren können, dass der Benutzer Eigentümer der App-ID ist. Weitere Informationen finden Sie oben unter Verknüpfen von Drittanbieter-Accounts mit Steam-Accounts.

Freischalten eines DRM-freien Nicht-Steam-Builds eines Spiels

ISteamUser/CheckAppOwnership (wie oben dokumentiert), um die Inhalte auf Ihrer eigenen Website freizuschalten. Alternativ können Sie den DRM-freien Build als optionalen kostenlosen DLC hochladen.

Die Software wird auf meiner eigenen Website verkauft und mit einem Schlüssel freigeschaltet

Sie möchten, dass Benutzer sich über OpenID direkt mit ihrem Steam-Account anmelden können. OpenID gibt die 64-Bit-Steam-ID des Benutzers zurück, mit deren Hilfe Sie über ISteamUser/CheckAppOwnership verifizieren können, dass der Benutzer Eigentümer der App-ID ist. Weitere Informationen finden Sie oben unter Drittanbieteraccounts mit Steam-Accounts verknüpfen.

Ablegen von Gegenständen im Spiel, um den Drittanbieter-Schlüssel zu registrieren

Wenn Sie den Steam-Inventardienst nutzen, stellen Sie sicher, dass die \itemdef\ des Gegenstands korrekt als Werbeartikel konfiguriert ist, und rufen Sie ISteamInventory::AddPromoItem vom Client aus auf.
Wenn Sie ein eigenes Backend für Gegenstände haben, können Sie vom Spiel-Client aus ISteamUser::GetAuthSessionTicket aufrufen und anschließend ISteamUserAuth/AuthenticateUserTicket mit ISteamUser/CheckAppOwnership verwenden, um den Eigentümer zu verifizieren. Weitere Informationen...

Der Schlüssel steuert, welche Version der Software freigeschaltet wird

Jede Version Ihres Spiels sollte ihre eigene App-ID besitzen. Rufen Sie vom Spiel-Client aus ISteamUser::GetAuthSessionTicket auf und verwenden Sie anschließend ISteamUserAuth/AuthenticateUserTicket mit ISteamUser/CheckAppOwnership, um den Eigentümer zu verifizieren. Weitere Informationen...