Documentazione di Steamworks
Autenticazione dell'utente e verifica della proprietà

Panoramica

Steamworks fornisce diversi metodi per l'autenticazione dell'identità di un utente di Steam e per la verifica della proprietà di un'applicazione. In questo documento vengono descritti i metodi di autenticazione utilizzati nei seguenti casi:

Identificazione di un utente all'interno di Steam

Ogni utente di Steam può essere identificato in modo univoco da un ID numerico a 64 bit, noto come ID di Steam dell'utente. Nelle API C++ di Steamworks, l'ID di Steam di un utente è contenuto all'interno di un oggetto CSteamID. È possibile recuperare l'ID di Steam dell'utente attuale effettuando la chiamata a ISteamUser::GetSteamID e recuperando l'ID a 64 bit con la chiamata a CSteamID.ConvertToUint64() sul valore restituito.

I metodi di autenticazione riportati di seguito possono essere utilizzati per verificare in modo sicuro l'ID di Steam di un utente.

API trattate in questo documento

Ticket di sessione

I ticket di sessione sono ticket firmati che possono essere utilizzati per la verifica dell'identità di un utente tra il client di gioco in uso e qualsiasi altro client (come in una sessione multigiocatore peer-to-peer) oppure per un server di gioco dedicato (utilizzando l'API ISteamGameServer). Questi ticket possono essere utilizzati anche per verificare la proprietà del gioco in uso dall'utente e i relativi contenuti scaricabili, nonché per determinare se l'utente abbia ricevuto un ban dal VAC (consulta Valve Anti-Cheat (VAC) e ban di gioco).
I ticket di sessione possono tornare utili anche per verificare l'identità di un utente tra un client di gioco e un server back-end protetto, utilizzando l'API Web di Steamworks. È necessario che il server protetto sia in grado di eseguire richieste HTTPS a partner.steam-api.com.

Ticket di applicazione crittografati

I ticket di applicazione crittografati possono essere utilizzati per verificare l'identità di un utente tra un client di gioco e un server back-end protetto. Diversamente dai ticket di sessione, la verifica dei ticket di applicazione crittografati non richiede che il server protetto sia in grado di eseguire le richieste HTTPS. Al contrario, il server protetto fa uso di una libreria C++ e di una chiave privata simmetrica per verificare il ticket. L'SDK di Steamworks include versioni a 32 e 64 bit di questa libreria per Windows e Linux all'interno della directory public/steam/lib.
Prima di utilizzare i ticket di applicazione crittografati è necessario generare una chiave privata per ciascun titolo. Puoi eseguire questa operazione da "Modifica impostazioni di Steamworks" nella tua applicazione, selezionando "Aut SDK" dal menu a tendina "Sicurezza". Questa chiave sarà associata all'AppID del tuo titolo e a qualsiasi contenuto scaricabile abbinato.

NOTA: queste chiavi devono essere archiviate in modo sicuro e non devono essere distribuite all'interno dell'applicazione in alcun modo.

API Web di Steamworks

Steam offre un'API Web basata su HTTP che può essere utilizzata per accedere a molte funzioni di Steamworks. L'API contiene i metodi pubblici a cui è possibile accedere da qualsiasi applicazione in grado di effettuare una richiesta HTTP, come i client o i server di gioco. L'API racchiude inoltre metodi protetti che richiedono l'autenticazione e il cui accesso è destinato alle applicazioni back-end attendibili. Ulteriori dettagli sull'API Web sono disponibili qui.

P2P o server di gioco

Ticket di sessione

Autenticazione dell'utente

Nei passaggi che seguono viene spiegato come utilizzare i ticket di sessione per verificare l'identità di un utente tra il suo client di gioco (client A) e un altro client o server di gioco (client B):

Alcune note importanti sui ticket di sessione:
  • I ticket di sessione devono essere utilizzati solo una volta. È necessario effettuare la chiamata a ISteamUser::GetAuthSessionTicket per ogni client che richiede un ticket nella sessione multigiocatore.
  • Quando questi ticket vengono utilizzati per autenticare i giocatori in una sessione multigiocatore peer-to-peer, ogni client di gioco deve verificare l'identità di ciascun client nella sessione multigiocatore.
  • Quando l'operazione con il ticket di sessione è terminata, è necessario effettuare la chiamata a ISteamUser::CancelAuthTicket per ogni handle restituito da ISteamUser::GetAuthSessionTicket.
  • Quando il client A effettua la chiamata a ISteamUser::CancelAuthTicket, il client B riceverà una richiamata ISteamUser::ValidateAuthTicketResponse_t che indica che il ticket del client A non è più valido.
  • Quando il client A lascia il gioco cui partecipava con il client B, se la chiamata del client A a ISteamUser::CancelAuthTicket viene elaborata prima della chiamata del client B a ISteamUser::EndAuthSession il client B può ricevere una richiamata ISteamUser::ValidateAuthTicketResponse_t che indica che il ticket è stato annullato. Dal momento che il client A sta lasciando il gioco di comune accordo, questa richiamata può essere ignorata.
  • Le condizioni di rete possono impedire al back-end di Steam di inviare una richiamata al chiamante di ISteamUser::BeginAuthSession per un periodo indefinito di tempo. Il chiamante di ISteamUser::BeginAuthSession (client B) non deve dare per scontato di conoscere la vera identità del client A fino a ricezione di questa richiamata, ma deve consentire alla sessione multigiocatore di proseguire.
  • Se il chiamante di ISteamUser::BeginAuthSession riceve una richiamata ISteamUser::ValidateAuthTicketResponse_t che indica che il ticket per il client A non è valido, il chiamante deve rifiutare la sessione multigiocatore con client A. Se gli altri peer nel gioco non rifiutano a loro volta di giocare con il client A, il chiamante deve lasciare la sessione multigiocatore.
  • ISteamGameServer consente di eseguire l'autenticazione tra un client e un server di gioco con gli stessi metodi dei ticket di sessione.

Verifica della proprietà

Quando si utilizzano i ticket di sessione, Steam verificherà automaticamente la proprietà dell'AppID attuale. Se l'utente non è proprietario dell'AppID, il campo m_eAuthSessionResponse di ISteamUser::ValidateAuthTicketResponse_t verrà impostato su k_EAuthSessionResponseNoLicenseOrExpired. Dopo aver ricevuto il ticket di sessione dell'utente e averlo passato a ISteamUser::BeginAuthSession, è possibile utilizzare ISteamUser::UserHasLicenseForApp per determinare se l'utente possiede uno specifico contenuto scaricabile.

Server back-end

Ticket di sessione e API Web di Steamworks

Autenticazione dell'utente

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:
  • Il client deve recuperare un ticket di sessione effettuando una chiamata a ISteamUser::GetAuthSessionTicket.
  • Per poter garantire un ticket valido, il client deve attendere la richiamata ISteamUser::GetAuthSessionTicketResponse_t.
  • Il client deve inviare il proprio ticket di sessione al server protetto.
  • Il server protetto deve eseguire una richiesta HTTPS a partner.steam-api.com ed effettuare la chiamata al metodo web ISteamUserAuth/AuthenticateUserTicket passando il ticket di sessione dell'utente come stringa esadecimale UTF-8 codificata. Tieni presente che questo metodo consente per l'invio del ticket sia una chiave API Web di Steam o una chiave API Web da editore associata all'AppID del ticket fornito. Un futuro aggiornamento di questa API potrebbe restituire ulteriori informazioni al chiamante quando viene fornita una chiave API Web da editore.
  • Se il ticket dell'utente è valido, ISteamUserAuth/AuthenticateUserTicket restituirà l'ID di Steam a 64-bit dell'utente.

Verifica della proprietà

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.

Ticket di applicazione crittografati

Autenticazione dell'utente

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 Esempio di applicazione dell'API di Steamworks (SpaceWar) project in the SDK. Specifically CSpaceWarClient::RetrieveEncryptedAppTicket and CSpaceWarClient::OnRequestEncryptedAppTicket.

Verifica della proprietà

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 Contenuti scaricabili (DLC).

Autenticazione basata su browser web con 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

Autenticazione dell'utente

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:
  • Configura la libreria OpenID per utilizzare l'URL seguente come OP Endpoint URL di Steam: https://steamcommunity.com/openid/
  • Dopo l'autenticazione dell'utente, l'ID richiesto includerà lo SteamID dell'utente. Il formato dello SteamID richiesto è: http://steamcommunity.com/openid/id/<steamid>.

Verifica della proprietà

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.

Esempi

Collegamento di account di terze parti ad account di 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. Inoltre, sebbene nuovi account di terze parti possano essere creati e collegati automaticamente quando viene riscontrato un nuovo ID di Steam, l'utente di Steam non si accorgerà affatto che è in corso una seconda autenticazione. 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.

Collegamento dall'interno del gioco

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:

Collegamento da un browser web

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

Verifica della proprietà

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.

Controlli di proprietà per la migrazione da codici prodotto di terze parti a codici prodotto nativi di 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:

Accesso alle discussioni private

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.

Sblocco della build di un gioco non di Steam senza 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.

Il software è in vendita sul mio sito web e deve essere sbloccato con un codice

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 Collegamento di account di terze parti ad account di Steam above.

Rilascio di oggetti nel gioco per la registrazione di codici prodotto di terze parti

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...

Il codice controlla quale versione del software è sbloccata

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...