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. Um Zugriff auf diesen Abschnitt auf Steamworks zu erhalten, muss ein Benutzer für die betreffende Anwendung über die Berechtigung „Signaturen verwalten“ verfügen.
HINWEIS: Bitte verwahren Sie diese Schlüssel sicher auf. Sie dürfen keinesfalls in irgendeiner Form mit Ihrer Anwendung weitergegeben werden!

Steamworks-Web-API

Mit der HTTP-basierten Web-API von Steam können Sie auf viele Steamworks-Funktionen zugreifen. 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 hier.

P2P- oder Spielserver

Sitzungstickets

Nutzerauthentifizierung

In den folgenden Schritten wird erläutert, wie Sie Sitzungstickets verwenden, um die Identität eines Benutzers zwischen dem Spiel-Client des Benutzers (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.

Besitzprüfung

Bei Verwendung von Sitzungstickets verifiziert Steam automatisch die Besitzrechte für die aktuelle App-ID. Wenn der Benutzer nicht im Besitz 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 Benutzers zwischen dem Spiel-Client des Benutzers und einem gesicherten Server zu verifizieren:
  • Der Client muss durch Aufrufen von ISteamUser::GetAuthTicketForWebApi ein Sitzungsticket abrufen.
  • Damit die Gültigkeit des Tickets garantiert ist, muss der Client auf den Rückruf ISteamUser::GetTicketForWebApiResponse_t 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.

Besitzprüfung

Sobald die Identität eines Benutzers verifiziert wurde, kann ein gesicherter Server mit der Web-API-Methode ISteamUser/CheckAppOwnership prüfen, ob der Benutzer im Besitz einer bestimmten App-ID ist, oder ISteamUser/GetPublisherAppOwnership aufrufen, um eine Liste aller App-IDs im Besitz 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 Benutzers zwischen dem Spiel-Client des Benutzers und einem gesicherten Server zu verifizieren:

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

Eigentumsprüfung

Steam erstellt verschlüsselte Anwendungstickets nur für Benutzer, die Besitzer 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. Drittanbieter-Websites können in einem Webbrowser OpenID verwenden, um die Steam-ID eines Benutzers abzurufen und sie als Anmeldedaten für die Drittanbieter-Website verwenden oder mit einem bestehenden Account auf dieser Website verknüpfen.

Bei Verwendung von OpenID startet der Benutzer im Webbrowser auf der Drittanbieter-Website. Wenn der Benutzer sich mit OpenID bei dieser Website anmelden oder seinen Account damit verknüpfen möchte, wird der Benutzer zu einem Anmeldeformular auf der Steam-Community-Website umgeleitet. Sobald der Benutzer seine Steam-Anmeldedaten eingegeben hat, wird der Webbrowser des Benutzers automatisch auf die Drittanbieter-Website 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 Benutzers 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>.

Besitzprüfung

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

Beispiele

Drittanbieteraccounts mit Steam-Accounts verknüpfen

Drittanbieter-Accounts können mit Steam-Accounts verknüpft werden, indem die Steam-ID eines Benutzers mit dem Drittanbieter-Account verknüpft wird.

Die Steam-ID eines Benutzers 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 durch den Drittanbieter-Account erlauben, indem Sie die Steam-ID des Benutzers verifizieren. Dadurch müssen sich Steam-Benutzer nicht ein zweites Mal bei Accountsystemen von Drittanbietern anmelden. Wenn bei einer neuen Steam-ID darüber hinaus neue Drittanbieter-Accounts automatisch erstellt und verknüpft werden, müssen Steam-Benutzer bei dieser zweiten Authentifizierung nicht behelligt werden. Stattdessen können sie mit ihrem Steam-Account auf alle Spiele im Besitz zugreifen. Dies sorgt für eine bessere Benutzererfahrung und verringert potenzielle Hindernisse für die Installation und das Ausprobieren neuer Spiele.

Verknüpfungen aus dem Spiel heraus

Mit Sitzungstickets können Sie über die Steamworks-Web-API die Identität eines Benutzers 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.

Besitzprüfung

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

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

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

Zugang zu privaten Foren

Benutzer sollen 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 im Besitz 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 Zusatzinhalt hochladen.

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

Benutzer sollen 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 im Besitz 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 Besitzer zu verifizieren. Weitere Informationen …

Der Schlüssel bestimmt, 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 Besitzer zu verifizieren. Weitere Informationen …