VulCode

Integracja Steam: logowanie przez Steam i Steam Web API

Gracz loguje się na stronie serwera kontem Steam, bez nowego hasła. Jego SteamID łączy konto na stronie z kontem w grze, a Steam Web API dostarcza nick, awatar, czas gry i informacje o banach. Na tej podstawie działają panel, itemshop i nagrody.

Serwery gier
Gracze ze SteamID w panelu strony serwera: wywołania Steam Web API dziś na tle limitu, pamięć podręczna profili, reguły rozdania i ostatnio aktywni gracze z czasem gry i banami
Sklep serwera na telefonie: logowanie przez Steam przed zakupem rangi VIP z listą tego, co strona dostanie, a czego nie

Steam jako dostawca logowania

Steam obsługuje OpenID 2.0. Po zalogowaniu strona dostaje 64-bitowe SteamID gracza i nic więcej.

Steam oddaje tylko identyfikator

SteamID

64-bitowy numer konta na końcu identyfikatora, który wraca ze Steam po zalogowaniu.

  • formathttp://steamcommunity.com/openid/id/<steamid>

Profil to osobne zapytanie

…powinna być używana tylko wtedy, gdy Twoja strona musi wyświetlać informacje o użytkowniku.

Gracz wie, czego strona nie dostanie

Okno logowania w sklepie serwera: przycisk Zaloguj przez Steam i lista tego, co strona dostanie, a czego nie

Przed logowaniem sklep mówi wprost: SteamID, nick i awatar, czas gry, jeśli profil go pokazuje. Hasła i e-maila strona nie dostaje.

Logowanie przez Steam krok po kroku

Najważniejszy jest krok weryfikacji. Parametry w adresie powrotu przychodzą od przeglądarki gracza, więc nie można im ufać, dopóki Steam ich nie potwierdzi.

Przebieg logowania przez Steam w panelu strony: siedem kroków między graczem, stroną, Steam OpenID i Steam Web API z parametrami openid, potwierdzeniem is_valid:true i danymi profilu oraz lista dzisiejszych logowań z odrzuconymi próbami
  1. Gracz

    klika "Zaloguj przez Steam"
  2. Powrót na nasz adres

    Odpowiedź musi wracać na nasz adres, a nie na podstawiony.

  3. Potwierdzenie u źródła

    Bezpośrednia weryfikacja z OpenID 2.0: te same parametry odsyłamy do Steam z trybem check_authentication. SteamID z adresu bez potwierdzenia przez Steam można podrobić jedną zmianą w URL.

  4. Konto dopiero po potwierdzeniu

    Dopiero po potwierdzeniu odczytujemy SteamID i łączymy z kontem. Nick, awatar i bany przychodzą wtedy ze Steam Web API, a klucz do niego zostaje na serwerze.

  5. Konto na stronie

    SteamID, nick, awatar i bany

Co łączy SteamID na stronie i w grze

Jedno konto gracza we wszystkich miejscach.

76561190000001184 · Gracz 03 · 312 h · VAC: brak · VIP

76561190000001184 · Gracz 03 · 312 h · VAC: brak Steam → strona, panel, serwer gry

VIP w obie strony

76561190000001184

Tożsamość gracza

Logowanie przez Steam.

Gracz 03

Nick i awatar

Logowanie i odświeżenie raz na jakiś czas.

312 h

Czas gry

Zadanie okresowe, jeśli profil to pokazuje.

VAC: brak

Bany

Logowanie albo wejście na serwer.

VIP

Zakupy z itemshopu

Płatność na stronie: przedmiot lub ranga trafia na serwer po SteamID.

SteamID jako klucz

Na serwerach gier SteamID jest zwykle już kluczem w bazie: w uprawnieniach, statystykach i banach. Dlatego połączenie strony z grą przez SteamID jest naturalne i nie wymaga od gracza wpisywania kodów.

Profile prywatne

Czas gry jest dostępny tylko przy widocznych danych. Nagrody za czas gry mają jasny komunikat, gdy profil je ukrywa.

Metody Steam Web API, z których korzystamy

Dane o graczu po zalogowaniu. Część zależy od ustawień prywatności profilu.

Wywołania Steam Web API na dobę

Limit z warunków korzystania z klucza.

0100 000
w limicieponad limit

GetPlayerSummaries SteamID w zapytaniu

Nick, awatar, adres profilu, widoczność, do 100 graczy naraz.

0100
jedno wywołanienastępne wywołanie
Metody, z których korzystamy
  • ISteamUser/GetPlayerSummaries v2Nick, awatar, adres profilu, widoczność, do 100 graczy naraz. Profil w panelu i rankingu.
  • IPlayerService/GetOwnedGamesGry i czas gry, jeśli są widoczne. Nagrody za czas gry.
  • ISteamUser/GetPlayerBansBany VAC i w grach, dni od ostatniego bana. Decyzje o dostępie do serwera.
  • IPlayerService/GetSteamLevelPoziom konta Steam. Próg dla nowych kont, np. przy rozdaniach.
  • ISteamUser/CheckAppOwnershipCzy gracz posiada daną grę. Tylko dla wydawcy gry, z kluczem wydawcy.

Co przesuwa zużycie limitu

Pamięć podręczna profili

Przy 100 000 wywołań dziennie odpytywanie Steam przy każdym wyświetleniu strony szybko kończy limit.

mniej wywołań

Zbiorcze zapytania

GetPlayerSummaries przyjmuje do 100 SteamID naraz, więc odświeżamy ranking paczkami.

100 graczy w jednym wywołaniu

Zapytanie przy każdym wyświetleniu

Bez pamięci podręcznej każde wyświetlenie profilu albo rankingu to osobne wywołanie Steam.

limit kończy się szybko

Najczęstsze pytania o integrację ze Steam

Odpowiedzi o e-mailu gracza, logowaniu przez Discord, kluczu Web API i wycenie.

Chcesz logowania przez Steam na stronie serwera?

Napisz, jaką masz grę i co ma się dziać po zalogowaniu. Odpowiemy w godzinę z pytaniami i wyceną.