Ü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:
- Kommunikation zwischen einem Spiel-Client und anderen Clients (P2P) oder Spielservern über Sitzungstickets.
- Kommunikation zwischen einem Spiel-Client und einem Backend-Server über:
- Ein Benutzer befindet sich in einem Webbrowser, der OpenID und die Steamworks-Web-API verwendet.
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:
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 …