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:
- Między grą a innymi klientami (P2P) lub serwerami gry za pomocą tokenów sesji,
- Między klientem gry a serwerem back-endu z wykorzystaniem:
- Kiedy użytkownik używa przeglądarki internetowej, korzystając z OpenID i WebAPI Steamworks.
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:
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...