Dokumentacja Steamworks
Uwierzytelnianie użytkownika i własność

Wprowadzenie

Steamworks może na kilka różnych sposobów zweryfikować tożsamość użytkownika Steam i potwierdzić, że jest on posiadaczem aplikacji. Poniżej znajdują się metody uwierzytelniania stosowane w następujących sytuacjach:

Identyfikacja użytkownika na Steam

Każdy użytkownik Steam może zostać zidentyfikowany za pomocą unikalnego 64-bitowego identyfikatora Steam, znanego jako Steam ID. W interfejsie API Steamworks, napisanym w C++, identyfikator SteamID użytkownika jest zawarty w obiekcie CSteamID. Możesz odzyskać identyfikator SteamID bieżącego użytkownika, wywołując ISteamUser::GetSteamID, a następnie uzyskać 64-bitowy identyfikator, wywołując CSteamID.ConvertToUint64() dla zwróconej wartości.

Następujące metody uwierzytelnienia mogą zostać użyte do bezpiecznej weryfikacji ID użytkownika.

API omówione w niniejszym dokumencie

Bilety sesji

Bilety sesji uwierzytelnienia to podpisane bilety, które służą do weryfikacji tożsamości użytkownika, gdy jego klient gry jest połączony z dowolną liczbą innych klientów gry (np. P2P) lub do serwera dedykowanego gry (przy użyciu ISteamGameServer API). Biletów tych można użyć do potwierdzenia własności gry i związanych z nią dodatkowych treści, a także do ustalenia, czy użytkownik ma blokadę VAC (patrz: doclink=features/anticheat][/doclink]).
.
Bilety sesji uwierzytelniania można wykorzystać do weryfikacji tożsamości użytkownika, gdy klient gry jest podłączony do bezpiecznego serwera wewnętrznego za pomocą interfejsu Steamworks. Wymagane jest, aby bezpieczny serwer mógł wysyłać żądania HTTPS dopartner.steam-api.com.

Zaszyfrowane bilety aplikacji

Zaszyfrowane bilety aplikacji mogą służyć do weryfikacji tożsamości użytkownika, gdy jego klient gry jest podłączony do bezpiecznego serwera wewnętrznego. W przeciwieństwie do biletów sesji uwierzytelniania potwierdzenie zaszyfrowanych zgłoszeń aplikacji nie wymaga żądań z bezpiecznego serwera HTTPS. Zamiast tego biblioteka języka C++ i prywatny, symetryczny klucz zostaną użyte przez bezpieczny serwer do weryfikacji biletu. Pakiet Steamworks SDK zawiera 32-bitowe i 64-bitowe wersje biblioteki dla systemów Windows i Linux w folderze public/steam/lib.
Przed użyciem zaszyfrowanych biletów aplikacji należy wygenerować klucz prywatny dla każdego produktu. Aby to zrobić, przejdź do strony „Zmień ustawienia Steamworks” i wybierz „Uwierzytelnianie SDK” w menu rozwijanym „Bezpieczeństwo”. Wygenerowany klucz będzie powiązany z numerem AppID twojego produktu i wszystkimi dodatkowymi treściami dołączonymi do niego.

Uwaga: klucze te muszą być bezpiecznie przechowywane i nie mogą być rozprowadzane w ramach aplikacji.

Interfejs Steamworks

Steam posiada interfejs oparty na HTTP, który może być używany do uzyskiwania dostępu do wielu funkcji Steamworks. Ten interfejs API zawiera publiczne metody, do których może uzyskać dostęp dowolna aplikacja zdolna do wysłania żądania HTTP, np. klient gry lub serwer. Zawiera również chronione metody, które wymagają uwierzytelniania i można uzyskać do nich dostęp za pomocą zaufanych aplikacji serwera. Więcej informacji możesz znaleźć tutaj.

P2P czy serwery gier

Bilety sesji

Weryfikacja użytkownika

Poniższe instrukcje pokazują, jak korzystać z biletów sesji uwierzytelniania, aby zweryfikować tożsamość użytkownika, gdy jego klient gry (klient A) jest połączony z dowolnym innym klientem lub serwerem gry (klient B):

Kilka ważnych informacji dotyczących biletów sesji:
  • Bilet sesji może zostać użyty tylko raz. Należy wywołać ISteamUser::GetAuthSessionTicket dla każdej aplikacji w sesji gry wieloosobowej żądającej biletu.
  • Jeśli bilet jest używany do uwierzytelniania użytkowników w sesji gier wieloosobowych peer-to-peer, każdy klient gry musi uwierzytelnić każdego klienta drugiej gry w sesji.
  • Po zakończeniu sesji uwierzytelniania należy wywołać funkcję ISteamUser::CancelAuthTicket dla danych zwróconych przez ISteamUser::GetAuthSessionTicket.
  • Gdy klient A wywoła ISteamUser::CancelAuthTicket, klient B otrzyma wywołanie zwrotne ISteamUser::ValidateAuthTicketResponse_t stwierdzające, że bilet klienta A jest już nieważny.
  • Gdy klient A opuszcza grę z klientem B, jeśli wywołanie przez klienta A funkcji ISteamUser::CancelAuthTicket zostanie przetworzone, zanim klient B wywoła funkcję ISteamUser::EndAuthSession, klient B może otrzymać wywołanie zwrotne ISteamUser::ValidateAuthTicketResponse_t, wskazując, że bilet został anulowany. Ponieważ istnieje wzajemne porozumienie, że klient A opuszcza sesję, wywołanie zwrotne zostanie zignorowane.
  • Problemy z siecią mogą uniemożliwić serwerowi Steam dostarczanie w odpowiednim czasie wywołań zwrotnych do strony, która wywołała ISteamUser::BeginAuthSession. Aplikacja wywołująca ISteamUser::BeginAuthSession (B) nie powinna zakładać, że posiada prawdziwe informacje o kliencie A przed odebraniem wywołania zwrotnego, ale powinna pozwolić na kontynuację sesji gry wieloosobowej.
  • Jeśli strona, która wywołała ISteamUser::BeginAuthSession otrzyma ISteamUser::ValidateAuthTicketResponse_t, wskazując, że bilet klienta A jest nieważny, wywołujący musi odmówić kontynuacji gry wieloosobowej z klientem A. Jeśli pozostali uczestnicy gry nie odmawiają gry z klientem A, wywołujący musi opuścić sesję.
  • ISteamGameServer zapewnia podobne sposoby korzystania z biletu sesji uwierzytelniania w celu zweryfikowania tożsamości użytkownika, gdy jego klient gry jest podłączony do serwera gry.

Weryfikacja własności

Podczas korzystania z biletu sesji uwierzytelniania, Steam automatycznie sprawdzi, czy użytkownik jest właścicielem bieżącej aplikacji. Jeśli użytkownik nie jest właścicielem aplikacji, polem_eAuthSessionResponse funkcji ISteamUser::ValidateAuthTicketResponse_t zostanie ustawione na k_EAuthSessionResponseNoLicenseOrExpired. Po otrzymaniu biletu sesji uwierzytelniania użytkownika i przesłaniu go do ISteamUser::BeginAuthSession, możesz użyć ISteamUser::UserHasLicenseForApp, aby określić, czy użytkownik jest właścicielem konkretnej części zawartości do pobrania.

Serwer wewnętrzny

Bilety sesji i interfejs API Steamworks

Weryfikacja użytkownika

The following steps detail how to use Session Tickets to verify a user's identity between the user's game client and a secure server:

Weryfikacja własności

Once a user's identity has been verified, a secure server can use the ISteamUser/CheckAppOwnership Web API method to check if the user owns a particular AppID, or call ISteamUser/GetPublisherAppOwnership to retrieve a list of all user owned AppIDs that are associated with the provided Publisher Key.

Zaszyfrowane bilety aplikacji

Weryfikacja użytkownika

The following steps detail how to use Encrypted Application Tickets to verify a user's identity between the user's game client and a secure server:

An example implementation can be found in the Steamworks API Example Application (SpaceWar) project in the SDK. Specifically CSpaceWarClient::RetrieveEncryptedAppTicket and CSpaceWarClient::OnRequestEncryptedAppTicket.

Weryfikacja własności

Steam will only create Encrypted Application Tickets for users who own the AppID for which the ticket was created. After decrypting an Encrypted Application Ticket, the secure server can use SteamEncryptedAppTicket::BIsTicketForApp to verify the AppID of the ticket matches the title's AppID. The server can also use SteamEncryptedAppTicket::BUserOwnsAppInTicket to determine if the user owns a specific piece of Zawartość do pobrania (DLC).

Uwierzytelnianie za pomocą przeglądarki internetowej z OpenID

Steam is an OpenID Provider, as described in the OpenID 2.0 specification. Inside a web browser, a third-party website can use OpenID to obtain a user's SteamID which can be used as the login credentials for the 3rd party website, or linked to an existing account on that website.

When using OpenID, the user begins in a web browser at the third-party website. When the user wishes to login/link their account to that website, using OpenID, the site directs the user to a login form on the Steam Community website. Once the user has entered their Steam login credentials, the user's web browser is automatically redirected back to the 3rd party website with some additional OpenID specific data appended to the return URL. The site's OpenID library can then use this data to verify and obtain the user's SteamID.

Steam provides the following images which may be used by 3rd party sites when linking to the Steam sign in page:
sits_large_border.png

sits_large_noborder.png

sits_small.png

Weryfikacja użytkownika

Steam's OpenID 2.0 implementation can be used to link a users Steam account to their account on the third-party website.
A list of open source OpenID libraries can be found at the OpenID website. To use OpenID to verify a user's identity:
  • Ustaw bibliotekę OpenID, aby korzystała z następującego łącza jako odniesienia do punktu końcowego Steam:https://steamcommunity.com/openid/
  • Po pomyślnym uwierzytelnieniu przypisany identyfikator będzie zawierać jego SteamID. Format przypisanego ID to: http://steamcommunity.com/openid/id/<steamid>.

Weryfikacja własności

Once a user's identity has been verified, a secure server can use the ISteamUser/CheckAppOwnership Web API method to check if the user owns a particular AppID, or call ISteamUser/GetPublisherAppOwnership to retrieve a list of all user owned AppIDs that are associated with the provided Web API Publisher Key.

Przykłady

Łączenie konta firmy trzeciej z kontem Steam

Third-party accounts can be linked to Steam accounts by associating a user's SteamID with the 3rd party account.

A user's SteamID can be securely retrieved either in-game or through a web browser and once the initial association has occurred, you can safely allow access to the 3rd party account by merely verifying a user's SteamID. This eliminates the need for Steam users to do any sort of secondary login to 3rd party account systems. Additionally, if new 3rd party accounts can be automatically created and linked when a new SteamID is encountered, the Steam user will never have to be aware that a secondary authentication is taking place at all. Instead, their single Steam account can grant access to all of their games, streamlining the user experience and removing potential barriers to installing and trying new games.

Łączenie kont w grze

Session Tickets can be used to verify a user's identity between a game client and a secure, backend server using the Steamworks Web API:

Łączenie kont za pomocą przeglądarki

Steam supports the OpenID 2.0 specification so that you can allow users to securly log into their Steam accounts from your website and retrieve their SteamID. For details on how to use OpenID with Steam go to Using OpenID

Weryfikacja własności

Once a user's identity has been verified, a secure server can use the ISteamUser/CheckAppOwnership Web API method to check if the user owns a particular AppID, or call ISteamUser/GetPublisherAppOwnership to retrieve a list of all user owned AppIDs that are associated with the provided Web API Publisher Key.

Przejście z kluczy cyfrowych firm trzecich do wbudowanej weryfikacji Steam

Steam itself has a number of ways a title can authenticate a user with, removing the need for a third-party CD key. We've compiled a list of common use cases for CD Keys and how you might implement each case natively with Steam:

Dostęp do prywatnego forum

You'll want to have users login directly with their Steam account using OpenID. OpenID will return the user's 64bit SteamID which can then be used with ISteamUser/CheckAppOwnership to verify the user owns your appid. More details can be found above at Linking 3rd party accounts to Steam accounts.

Odblokowanie treści bez ochrony DRM

Use OpenID and ISteamUser/CheckAppOwnership (documented above) to unlock the content on your own site. Alternatively, you could upload the DRM-free build as optional, free DLC.

Oprogramowanie jest sprzedawane na mojej stronie internetowej z kluczem

You'll want to have users login directly with their Steam account using OpenID. OpenID will return the user's 64bit SteamID which can then be used with ISteamUser/CheckAppOwnership to verify the user owns your appid. More details can be found in Łączenie konta firmy trzeciej z kontem Steam above.

Wydawanie przedmiotów w grze w celu zarejestrowania klucza innej firmy

If you are using the Steam Inventory Service, make sure the item's itemdef is configured correctly as a promo item and call ISteamInventory::AddPromoItem from the client.
If you have your own item backend, you can call ISteamUser::GetAuthSessionTicket from the game client and then use ISteamUserAuth/AuthenticateUserTicket with ISteamUser/CheckAppOwnership to verify ownership. More Information...

Klucz kontroluje, która wersja oprogramowania zostanie odblokowana

Each version of your game should have its own AppID. From the game client, call ISteamUser::GetAuthSessionTicket and then use ISteamUserAuth/AuthenticateUserTicket with ISteamUser/CheckAppOwnership to verify ownership. More Information...