Dokumentacja Steamworks
Uwierzytelnianie użytkownika i stan własności

Wprowadzenie

Steamworks posiada kilka różnych metod uwierzytelniania tożsamości użytkownika Steam i weryfikacji, że jest on posiadaczem aplikacji. Poniższy dokument opisuje każdą z tych metod uwierzytelniania w następujących sytuacjach:

Identyfikacja użytkownika w obrębie Steam

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

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

API omówione w niniejszym dokumencie

Tokeny sesji

Tokeny sesji to podpisane tokeny, które służą do weryfikacji tożsamości użytkownika między jego klientem gry a dowolną liczbą innych klientów gier (np. wieloosobowa sesja peer-to-peer) lub serwerem dedykowanym/nasłuchu gry (przy użyciu API ISteamGameServer). Tokenów tych można również użyć do weryfikacji, czy użytkownik posiada bieżącą grę i związaną z nią zawartość do pobrania, a także do określenia, czy użytkownik posiada blokadę VAC (patrz: Valve Anti-Cheat (VAC) i blokady na gry).
.
Tokeny sesji można wykorzystać do weryfikacji tożsamości użytkownika między klientem gry i serwerem back-endu zabezpieczonym za pomocą WebAPI Steamworks. Wymagane jest, aby zabezpieczony serwer mógł wysyłać żądania HTTPS do partner.steam-api.com.

Zaszyfrowane tokeny aplikacji

Zaszyfrowane tokeny aplikacji mogą służyć do weryfikacji tożsamości użytkownika między klientem gry a zabezpieczonym serwerem back-endu. W przeciwieństwie do tokenów sesji, weryfikacja z wykorzystaniem zaszyfrowanych tokenów aplikacji nie wymaga, by zabezpieczony serwer mógł wysyłać żądania HTTPS. Zabezpieczony serwer zamiast tego korzysta z biblioteki języka C++ i prywatnego klucza symetrycznego do weryfikacji tokena. 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 tokenów aplikacji należy wygenerować klucz prywatny dla każdego tytułu. Aby to zrobić, przejdź do strony „Edytuj ustawienia Steamworks” i wybierz „Uwierzytelnianie SDK” w menu rozwijanym „Bezpieczeństwo”. Ten klucz będzie powiązany z ID aplikacji twojego produktu i wszelką zawartością do pobrania dla tego tytułu. Aby mieć dostęp do tej sekcji Steamworks, użytkownik musi posiadać uprawnienia do zarządzania podpisywaniem dla danej aplikacji.
Uwaga: klucze te muszą być bezpiecznie przechowywane i nie mogą być rozprowadzane w obrębie twojej aplikacji!

WebAPI Steamworks

Steam posiada WebAPI oparte na HTTP, które może być używane do uzyskiwania dostępu do wielu funkcji Steamworks. To API zawiera publiczne metody, do których może uzyskać dostęp dowolna aplikacja zdolna do wysłania żądań HTTP, np. klient gry lub serwer. Zawiera ono również chronione metody, które wymagają uwierzytelniania i do których dostęp powinien być uzyskiwany za pomocą zaufanych aplikacji back-endu. Więcej informacji o tym WebAPI możesz znaleźć tutaj.

P2P lub serwery gier

Tokeny sesji

Uwierzytelnianie użytkownika

Poniższe instrukcje szczegółowo opisują, jak korzystać z tokenów sesji w celu weryfikacji tożsamości użytkownika między jego klientem gry (klient A) a dowolnym innym klientem lub serwerem gry (klient B):

Kilka ważnych informacji dotyczących tokenów sesji:
  • Tokeny sesji mogą zostać użyte tylko raz. Należy wywołać ISteamUser::GetAuthSessionTicket dla każdego klienta żądającego tokena w sesji gry wieloosobowej.
  • Jeśli token jest używany do uwierzytelniania użytkowników w ramach sesji wieloosobowej peer-to-peer, każdy klient gry powinien weryfikować tożsamość każdego innego klienta gry w sesji wieloosobowej.
  • Po zakończeniu z tokenem sesji należy wywołać ISteamUser::CancelAuthTicket dla każdego uchwytu zwróconego przez ISteamUser::GetAuthSessionTicket.
  • Gdy klient A wywoła ISteamUser::CancelAuthTicket, klient B otrzyma wywołanie zwrotne ISteamUser::ValidateAuthTicketResponse_t stwierdzające, że token 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ące, że token został anulowany. Z racji tego, iż istnieje wzajemne porozumienie, że klient A opuszcza sesję, to wywołanie zwrotne może zostać zignorowane.
  • Warunki sieciowe mogą uniemożliwić back-endowi Steam dostarczenie wywołania zwrotnego do osoby wywołującej ISteamUser::BeginAuthSession przez nieokreślony czas. Osoba wywołująca ISteamUser::BeginAuthSession (klient B) nie powinna zakładać, że posiada prawdziwą tożsamość klienta A, dopóki to wywołanie zwrotne nie zostanie odebrane, ale powinna zezwolić na kontynuację sesji gry wieloosobowej.
  • Jeśli osoba wywołująca funkcję ISteamUser::BeginAuthSession otrzyma wywołanie zwrotne ISteamUser::ValidateAuthTicketResponse_t wskazujące, że token klienta A jest nieważny, wywołujący musi odmówić kontynuacji sesji gry wieloosobowej z klientem A. Jeśli pozostali uczestnicy gry nie odmówią również gry z klientem A, wywołujący musi opuścić tę sesję.
  • ISteamGameServer zapewnia podobne metody korzystania z tokena sesji w celu uwierzytelniania między klientem gry a serwerem gry.

Weryfikacja własności

Podczas korzystania z tokenów sesji Steam automatycznie zweryfikuje, czy użytkownik jest posiadaczem bieżącego ID aplikacji. Jeśli użytkownik nie jest posiadaczem bieżącego ID aplikacji, pole m_eAuthSessionResponse wywołania zwrotnego ISteamUser::ValidateAuthTicketResponse_t zostanie ustawione na k_EAuthSessionResponseNoLicenseOrExpired. Po otrzymaniu tokena sesji użytkownika i przekazaniu go do ISteamUser::BeginAuthSession możesz użyć ISteamUser::UserHasLicenseForApp, aby określić, czy użytkownik jest posiadaczem danej zawartości do pobrania.

Serwer back-endu

Tokeny sesji oraz WebAPI Steamworks

Uwierzytelnianie użytkownika

Poniższe instrukcje szczegółowo opisują, jak korzystać z tokenów sesji w celu weryfikacji tożsamości użytkownika między jego klientem gry a zabezpieczonym serwerem:

Weryfikacja własności

Po zweryfikowaniu tożsamości użytkownika zabezpieczony serwer może użyć metody WebAPI ISteamUser/CheckAppOwnership, by sprawdzić, czy użytkownik posiada określone ID aplikacji, lub wywołać ISteamUser/GetPublisherAppOwnership, aby uzyskać listę wszystkich ID aplikacji posiadanych przez użytkownika i powiązanych z dostarczonym kluczem wydawcy.

Zaszyfrowane tokeny aplikacji

Uwierzytelnianie użytkownika

Poniższe instrukcje szczegółowo opisują, jak korzystać z zaszyfrowanych tokenów aplikacji w celu weryfikacji tożsamości użytkownika między jego klientem gry a zabezpieczonym serwerem:

Przykłady implementacji można znaleźć w przykładowym projekcie w SDK. Szczególnie w CSpaceWarClient::RetrieveEncryptedAppTicket i CSpaceWarClient::OnRequestEncryptedAppTicket.

Weryfikacja własności

Steam utworzy zaszyfrowane tokeny aplikacji tylko dla użytkowników posiadających ID aplikacji, dla którego utworzono token. Po odszyfrowaniu zaszyfrowanego tokena aplikacji zabezpieczony serwer może użyć SteamEncryptedAppTicket::BIsTicketForApp, aby zweryfikować, czy ID aplikacji tokena jest zgodne z ID aplikacji tytułu. Serwer może również użyć SteamEncryptedAppTicket::BUserOwnsAppInTicket, aby określić, czy użytkownik posiada określone DLC.

Uwierzytelnianie za pomocą przeglądarki internetowej z OpenID

Steam jest dystrybutorem OpenID, co opisano w specyfikacji OpenID 2.0. W przeglądarce internetowej strona firmy zewnętrznej może użyć OpenID, aby uzyskać ID Steam użytkownika, który można wprowadzić jako dane logowania do strony firmy zewnętrznej lub powiązać z istniejącym kontem na tej stronie.

Podczas korzystania z OpenID użytkownik rozpoczyna proces w przeglądarce internetowej na stronie firmy zewnętrznej. Kiedy użytkownik chce zalogować się na swoje konto lub powiązać je ze stroną internetową z użyciem OpenID, zostanie przekierowany do strony z formularzem logowania na stronie Społeczności Steam. Po tym, jak użytkownik wprowadzi dane logowania do Steam, przeglądarka internetowa użytkownika jest automatycznie przekierowywana z powrotem na stronę firmy zewnętrznej z dodatkowymi danymi OpenID dodanymi do URL zwrotnego. Biblioteka OpenID strony może następnie użyć tych danych do sprawdzenia i pobrania ID Steam użytkownika.

Steam udostępnia następujące obrazy, które mogą być używane przez strony firm zewnętrznych w odnośnikach do strony logowania na Steam:
sits_large_border.png

sits_large_noborder.png

sits_small.png

Uwierzytelnianie użytkownika

Implementacja OpenID 2.0 przez Steam może zostać użyta do łączenia konta użytkownika Steam z jego kontem na stronie firmy zewnętrznej.
Listę bibliotek OpenID z licencją open source można znaleźć na stronie OpenID. Aby użyć OpenID do weryfikacji tożsamości użytkownika:
  • Skonfiguruj swoją bibliotekę OpenID, aby korzystała z następującego URL jako URL OP Endpoint Steam: https://steamcommunity.com/openid/.
  • Po tym, jak użytkownik został uwierzytelniony, przypisane ID (Claimed ID) użytkownika będzie zawierać ID Steam użytkownika. Format przypisanego ID dla Steam to: http://steamcommunity.com/openid/id/<steamid>.

Weryfikacja własności

Po zweryfikowaniu tożsamości użytkownika zabezpieczony serwer może użyć metody WebAPI ISteamUser/CheckAppOwnership, by sprawdzić, czy użytkownik posiada określone ID aplikacji, lub wywołać ISteamUser/GetPublisherAppOwnership, aby uzyskać listę wszystkich ID aplikacji posiadanych przez użytkownika i powiązanych z dostarczonym kluczem wydawcy WebAPI.

Przykłady

Łączenie kont firmy zewnętrznej z kontami Steam

Konta firm zewnętrznych można powiązać z kontami Steam, łącząc ID Steam użytkownika z kontem firmy zewnętrznej.

ID Steam użytkownika można bezpieczne uzyskać w grze lub przez przeglądarkę internetową. Po udanym wstępnym powiązaniu możesz zezwolić na dostęp do konta firmy zewnętrznej, weryfikując tylko za pomocą ID Steam użytkownika. Eliminuje to konieczność dodatkowego logowania się na konta firm zewnętrznych dla użytkowników Steam. Ponadto jeśli nowe konta firm zewnętrznych mogą być automatycznie tworzone i łączone z nowo napotkanym ID Steam, to użytkownik Steam nie będzie musiał wiedzieć, że ma miejsce jakiekolwiek drugorzędne uwierzytelnianie. Zamiast tego jego pojedyncze konto Steam może zapewnić dostęp do wszystkich jego gier, optymalizując działania użytkowników i eliminując potencjalne problemy z instalowaniem i testowaniem nowych gier.

Łączenie z poziomu gry

Tokeny sesji mogą służyć do weryfikacji tożsamości użytkownika między klientem gry a zabezpieczonym serwerem back-endu z wykorzystaniem WebAPI Steamworks:

Łączenie z poziomu przeglądarki

Steam obsługuje specyfikację OpenID 2.0, dzięki czemu możesz umożliwić użytkownikom bezpieczne zalogowanie się na ich konta Steam na twojej stronie i uzyskanie ich ID Steam. Aby uzyskać więcej informacji o korzystaniu z OpenID ze Steam, przejdź tutaj.

Weryfikacja własności

Po zweryfikowaniu tożsamości użytkownika zabezpieczony serwer może użyć metody WebAPI ISteamUser/CheckAppOwnership, by sprawdzić, czy użytkownik posiada określone ID aplikacji, lub wywołać ISteamUser/GetPublisherAppOwnership, aby uzyskać listę wszystkich ID aplikacji posiadanych przez użytkownika i powiązanych z dostarczonym kluczem wydawcy WebAPI.

Migracja z kluczy firm zewnętrznych do natywnego sprawdzania własności na Steam

Steam sam w sobie posiada różne narzędzia, dzięki którym produkt może uwierzytelniać użytkownika, usuwając potrzebę korzystania z klucza produktu firmy zewnętrznej. Sporządziliśmy listę najczęstszych przypadków użycia kluczy produktów, a także sposoby implementacji każdego takiego przypadku natywnie na Steam:

Dostęp do prywatnego forum

Użytkownicy będą musieli zalogować się bezpośrednio do swojego konta Steam za pomocą OpenID. OpenID zwróci 64-bitowe ID Steam użytkownika, które można następnie użyć wraz z ISteamUser/CheckAppOwnership, aby zweryfikować, czy użytkownik jest posiadaczem twojego ID aplikacji. Więcej informacji możesz znaleźć powyżej w sekcji dotyczącej łączenia kont firmy zewnętrznej z kontami Steam.

Odblokowywanie kompilacji gry spoza Steam bez DRM

Użyj OpenID oraz ISteamUser/CheckAppOwnership (jak opisano powyżej), aby odblokować treści na swojej stronie. Możesz przesłać kompilację bez DRM jako opcjonalne, darmowe DLC.

Oprogramowanie jest sprzedawane na mojej stronie internetowej i jest odblokowywane kluczem

Użytkownicy będą musieli zalogować się bezpośrednio do swojego konta Steam za pomocą OpenID. OpenID zwróci 64-bitowe ID Steam użytkownika, które można następnie użyć wraz z ISteamUser/CheckAppOwnership, aby zweryfikować, czy użytkownik jest posiadaczem twojego ID aplikacji. Więcej informacji możesz znaleźć w sekcji Łączenie kont firmy zewnętrznej z kontami Steam.

Przyznawanie przedmiotów w grze za zarejestrowanie klucza firmy zewnętrznej

Jeśli używasz usługi Ekwipunku Steam, upewnij się, że itemdef przedmiotu jest poprawnie skonfigurowany jako przedmiot promocyjny i wywołaj ISteamInventory::AddPromoItem z poziomu klienta.
Jeśli posiadasz własny back-end dla przedmiotów, możesz wywołać ISteamUser::GetAuthSessionTicket z poziomu klienta gry, a następnie użyć ISteamUserAuth/AuthenticateUserTicket z ISteamUser/CheckAppOwnership, aby zweryfikować stan posiadania. Więcej informacji...

Klucz kontroluje, która wersja oprogramowania zostanie odblokowana

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