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

Uwaga: tej metody uwierzytelniania użytkownika nie można używać w grach korzystających z Valve Anti-Cheat.

Bilety sesji i interfejs API Steamworks

Weryfikacja użytkownika

Poniższe instrukcje pokazują, jak korzystać z biletów sesji w celu uwierzytelnienia tożsamości użytkownika pomiędzy klientem jego gry a zabezpieczonym serwerem.

Weryfikacja własności

Po potwierdzeniu tożsamości użytkownika bezpieczny serwer może użyć metody WebAPI ISteamUser/CheckAppOwnership w celu sprawdzenia, czy użytkownik posiada określony numer produktu, lub wywołać ISteamUser/GetPublisherAppOwnership, aby otrzymać listę wszystkich numerów produktów posiadanych przez użytkownika, powiązanych z kluczem wydawcy.

Zaszyfrowane bilety aplikacji

Weryfikacja użytkownika

Poniższe instrukcje pokazują, jak korzystać z zaszyfrowanych biletów aplikacji w celu uwierzytelnienia użytkownika pomiędzy klientem gry a bezpiecznym serwerem:

Przykłady implementacji można znaleźć w projekcie Steamworks API Example Application (SpaceWar) w SDK. Szczególnie w CSpaceWarClient::RetrieveEncryptedAppTicket i CSpaceWarClient::OnRequestEncryptedAppTicket.

Weryfikacja własności

Steam utworzy zaszyfrowane bilety aplikacji tylko dla użytkowników posiadających AppID, dla którego utworzono bilet. Po odszyfrowaniu zaszyfrowanego biletu aplikacji, bezpieczny serwer może użyć SteamEncryptedAppTicket::BIsTicketForApp, aby sprawdzić, czy AppID biletu jest zgodne z tytułem AppID. Serwer może użyć SteamEncryptedAppTicket::BUserOwnsAppInTicket, aby określić, czy użytkownik posiada określoną część Downloadable Content (DLC).

Uwierzytelnianie za pomocą przeglądarki internetowej z OpenID

Steam udostępnia OpenID. Ta informacja jest wymieniona w specyfikacji wersji 2.0 OpenID. W witrynie przeglądarki inna strona może użyć identyfikatora OpenID, aby uzyskać identyfikator Steam użytkownika, który można wprowadzić jako dane logowania do strony trzeciej lub powiązać z istniejącym kontem w tej witrynie.

Uczestnik rozpoczyna proces na stronie internetowej firmy trzeciej. Kiedy użytkownik chce zalogować się na swoje konto lub połączyć je ze stroną internetową, używając OpenID, zostanie przekierowany do strony z formularzem logowania w witrynie społeczności Steam. Po wprowadzeniu danych logowania do Steam, przeglądarka internetowa użytkownika jest automatycznie przekierowywana z powrotem na stronę zewnętrzną z dodatkowymi danymi OpenID dodanymi do zwróconego URL. Biblioteka OpenID witryny może następnie użyć tych danych do sprawdzenia i pobrania SteamID użytkownika.

Steam udostępnia następujące obrazy, które mogą być używane przez strony trzecie do odnośników na stronę Steam:
sits_large_border.png

sits_large_noborder.png

sits_small.png

Weryfikacja użytkownika

Wdrożenie wersji 2.0 OpenID Steam może być użyte do połączenia konta użytkownika Steam z jego kontem w witrynie innej firmy.
Listę otwartych bibliotek OpenID można znaleźć na stronie OpenID. Aby użyć OpenID do weryfikacji tożsamości użytkownika:
  • 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

Po potwierdzeniu tożsamości użytkownika bezpieczny serwer może użyć metody WebAPI ISteamUser/CheckAppOwnership w celu sprawdzenia, czy użytkownik jest właścicielem określonego AppID lub wywołać ISteamUser/GetPublisherAppOwnership, aby uzyskać listę wszystkich użytkowników posiadających AppID powiązanych z podanym kluczem wydawcy.

Przykłady

Łączenie konta firmy trzeciej z kontem Steam

Konta osób trzecich można łączyć z kontami Steam, łącząc SteamID użytkownika z kontem innej firmy.

SteamID użytkownika można uzyskać w grze lub przez przeglądarkę internetową. Po udanym powiązaniu możesz zezwolić na dostęp do konta innej firmy, potwierdzając identyfikator Steam użytkownika. Eliminuje to konieczność dodatkowego logowania się na konta firm trzecich dla użytkowników Steam. Ponadto jeśli nowe konta firm trzecich mogą być automatycznie tworzone i łączone z SteamID, użytkownicy Steam nie będą musieli się martwić o dodatkowe uwierzytelnianie. Jedno konto Steam może zapewnić dostęp do wszystkich gier, optymalizując działania użytkowników i eliminując potencjalne problemy z instalowaniem i testowaniem nowych gier.

Łączenie kont w grze

Bilety sesji uwierzytelniania mogą być używane do weryfikacji użytkownika, gdy klient gry jest połączony z bezpiecznym serwerem wewnętrznym za pomocą interfejsu Steamworks:

Łączenie kont za pomocą przeglądarki

Steam obsługuje OpenID w wersji 2.0, dzięki czemu możesz zezwolić użytkownikom na zalogowanie się na swoje konto Steam ze swojej witryny i pobranie ich SteamID. Aby uzyskać więcej informacji o korzystaniu z OpenID ze Steam odwiedź stronę Using OpenID.

Weryfikacja własności

Po potwierdzeniu tożsamości użytkownika bezpieczny serwer może użyć metody WebAPI ISteamUser/CheckAppOwnership w celu sprawdzenia, czy użytkownik jest właścicielem określonego AppID lub wywołać ISteamUser/GetPublisherAppOwnership, aby uzyskać listę wszystkich AppID powiązanych z kluczem wydawcy.

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

Steam posiada różne narzędzia służące do weryfikacji własności produktu, eliminując potrzebę użycia klucza cyfrowego innej firmy. Sporządziliśmy listę najczęściej używanych kluczy cyfrowych, a także sposoby wdrożenia każdego takiego przypadku na Steam:

Dostęp do prywatnego forum

Użytkownicy będą musieli zalogować się bezpośrednio do swojego konta Steam za pomocą OpenID. OpenID zwraca 64-bitowy identyfikator użytkownika SteamID, który można zostać użyty z ISteamUser/CheckAppOwnership, aby sprawdzić, czy użytkownik jest właścicielem aplikacji. Więcej informacji możesz znaleźć w artykule Łączenie kont firm trzecich z kontem Steam.

Odblokowanie treści bez ochrony DRM

Użyj OpenID oraz ISteamUser/CheckAppOwnership (documented above), aby odblokować treści na swojej stronie. Możesz także przesłać build bez zabezpieczenia DRM jako opcjonalne, darmowe DLC.

Oprogramowanie jest sprzedawane na mojej stronie internetowej z kluczem

Użytkownicy będą musieli zalogować się bezpośrednio do swojego konta Steam za pomocą OpenID. OpenID zwraca 64-bitowy identyfikator użytkownika SteamID, który można zostać użyty z ISteamUser/CheckAppOwnership, aby sprawdzić, czy użytkownik jest właścicielem aplikacji. Więcej informacji możesz znaleźć w sekcji Łączenie konta firmy trzeciej z kontem Steam.

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

Jeśli używasz usługi Ekwipunku Steam, upewnij się, że itemdef przedmiotu jest poprawnie skonfigurowane jako przedmiot promocyjny i wywołaj ISteamInventory::AddPromoItem za pomocą klienta.
Jeśli posiadasz własny backend produktu, możesz wywołać ISteamUser::GetAuthSessionTicket za pomocą klienta gry, następnie użyć ISteamUserAuth/AuthenticateUserTicket z ISteamUser/CheckAppOwnership, aby zweryfikować własność. Więcej informacji...

Klucz kontroluje, która wersja oprogramowania zostanie odblokowana

Każda wersja twojej gry powinna posiadać własne AppID. Z klienta gry wywołaj ISteamUser::GetAuthSessionTicket i użyj ISteamUserAuth/AuthenticateUserTicket z ISteamUser/CheckAppOwnership, aby zweryfikować własność. Więcej informacji...