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. Per accedere a questa sezione di Steamworks l'utente ha bisogno dell'autorizzazione alla gestione delle firme per l'applicazione selezionata.
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 di 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 callback 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 callback ISteamUser::ValidateAuthTicketResponse_t che indica che il ticket è stato annullato. Dal momento che il client A sta lasciando il gioco di comune accordo, questa callback può essere ignorata.
  • Le condizioni di rete possono impedire al back-end di Steam di inviare una callback al caller di ISteamUser::BeginAuthSession per un periodo indefinito di tempo. Il caller di ISteamUser::BeginAuthSession (client B) non deve dare per scontato di conoscere la vera identità del client A fino a ricezione di questa callback, ma deve consentire alla sessione multigiocatore di proseguire.
  • Se il caller di ISteamUser::BeginAuthSession riceve una callback 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 caller 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

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 e un server protetto:

Verifica della proprietà

Una volta verificata l'identità dell'utente, il server protetto può utilizzare il metodo dell'API web ISteamUser/CheckAppOwnership per verificare se l'utente possiede un appID specifico oppure effettuare la chiamata a ISteamUser/GetPublisherAppOwnership per recuperare un elenco di tutti gli appID di proprietà dell'utente associati alla chiave da editore fornita.

Ticket di applicazione crittografati

Autenticazione dell'utente

Nei passaggi che seguono viene spiegato come utilizzare i ticket di applicazione crittografati per verificare l'identità di un utente tra il suo client di gioco e un server protetto:

Un esempio di implementazione può essere trovato nel progetto Esempio di applicazione dell'API di Steamworks (SpaceWar) nell'SDK. In particolare, CSpaceWarClient::RetrieveEncryptedAppTicket e CSpaceWarClient::OnRequestEncryptedAppTicket.

Verifica della proprietà

Steam creerà i ticket di applicazione crittografati solo per gli utenti che possiedono l'appID per il quale è stato creato il ticket. Dopo aver decrittografato un ticket di applicazione crittografato, il server protetto può utilizzare SteamEncryptedAppTicket::BIsTicketForApp per verificare che l'appID del ticket corrisponda a quello del titolo. Il server può inoltre utilizzare SteamEncryptedAppTicket::BUserOwnsAppInTicket per determinare se l'utente possiede specifici Contenuti scaricabili (DLC).

Autenticazione basata su browser web con OpenID

Steam è un fornitore di OpenID, come descritto nella specifica di OpenID 2.0. All'interno di un browser, un sito web di terze parti può utilizzare OpenID per ottenere l'ID di Steam dell'utente, quindi utilizzarlo come credenziali di accesso per il sito web di terze parti o collegarlo a un account esistente su tale sito web.

Quando si utilizza OpenID, l'utente inizia la navigazione da un browser sul sito web di terze parti. Quando l'utente desidera accedere a quel sito o collegarvi il proprio account, il sito indirizza l'utente mediante OpenID a un modulo di accesso sul sito web della Comunità di Steam. Una volta che l'utente ha immesso le credenziali di accesso a Steam, il browser web viene reindirizzato automaticamente al sito web di terze parti con alcuni dati specifici di OpenID aggiunti all'URL di ritorno. La libreria OpenID del sito può quindi utilizzare questi dati per verificare e ottenere l'ID di Steam dell'utente.

Le immagini che seguono possono essere utilizzate dai siti di terze parti per il collegamento alla pagina di accesso a Steam:
sits_large_border.png

sits_large_noborder.png

sits_small.png

Autenticazione dell'utente

L'implementazione di OpenID 2.0 di Steam può essere utilizzata per collegare un account utente di Steam all'account utente di un sito web di terze parti.
Sul sito web di OpenID è disponibile un elenco delle librerie open source di OpenID. Per utilizzare OpenID per la verifica dell'identità di un utente:
  • 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à

Una volta verificata l'identità dell'utente, il server protetto può utilizzare il metodo dell'API web ISteamUser/CheckAppOwnership per verificare se l'utente possiede un appID specifico oppure effettuare la chiamata a ISteamUser/GetPublisherAppOwnership per recuperare un elenco di tutti gli appID di proprietà dell'utente associati alla chiave dell'API web da editore fornita.

Esempi

Collegamento di account di terze parti ad account di Steam

Gli account di terze parti possono essere collegati a un account di Steam associando l'ID di Steam dell'utente all'account di terzi.

L'ID di Steam di un utente può essere recuperato in modo sicuro dall'interno del gioco o attraverso un browser web. Dopo l'associazione iniziale, puoi concedere in sicurezza l'accesso all'account di terze parti mediante una semplice verifica dell'ID di Steam dell'utente. In questo modo gli utenti di Steam non devono eseguire alcun tipo di accesso secondario a sistemi di account di terze parti. 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. Al contrario, il singolo account di Steam consente all'utente di accedere a tutti i suoi giochi, semplificando l'esperienza complessiva e rimuovendo potenziali impedimenti all'installazione e alla ricerca di nuovi giochi da provare.

Collegamento dall'interno del gioco

I ticket di sessione possono essere utilizzati per verificare l'identità di un utente tra un client di gioco e un server di back-end protetto utilizzando l'API web di Steamworks:

Collegamento da un browser web

Steam supporta la specifica OpenID 2.0 per consentire agli utenti di accedere in modo sicuro ai propri account di Steam dal tuo sito web e di recuperare il proprio ID di Steam. Per i dettagli su come utilizzare OpenID con Steam, consulta la sezione Utilizzo di OpenID

Verifica della proprietà

Una volta verificata l'identità dell'utente, il server protetto può utilizzare il metodo dell'API web ISteamUser/CheckAppOwnership per verificare se l'utente possiede un appID specifico oppure effettuare la chiamata a ISteamUser/GetPublisherAppOwnership per recuperare un elenco di tutti gli appID di proprietà dell'utente associati alla chiave dell'API web da editore fornita.

Controlli di proprietà per la migrazione da codici prodotto di terze parti a codici prodotto nativi di Steam

Steam fornisce numerosi modi per autenticare un utente all'interno dei giochi, rimuovendo la necessità di utilizzare codici prodotto di terze parti. Abbiamo compilato un elenco di casi d'uso comune relativi ai codici prodotto e informazioni su come implementare ciascun caso in modo nativo in Steam:

Accesso alle discussioni private

Dovrai far accedere gli utenti direttamente con il loro account di Steam utilizzando OpenID. OpenID restituirà l'ID di Steam a 64 bit dell'utente che può in seguito essere utilizzato con ISteamUser/CheckAppOwnership per verificare che l'utente sia proprietario dell'appID. È possibile trovare maggiori dettagli alla sezione Collegamento di account di terze parti ad account di Steam.

Sblocco della build di un gioco non di Steam senza DRM

Utilizza OpenID e ISteamUser/CheckAppOwnership (descritto sopra) per sbloccare il contenuto del tuo sito. In alternativa, puoi caricare la build senza DRM come DLC gratuito opzionale.

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

Dovrai far accedere gli utenti direttamente con il loro account di Steam utilizzando OpenID. OpenID restituirà l'ID di Steam a 64 bit dell'utente che può in seguito essere utilizzato con ISteamUser/CheckAppOwnership per verificare che l'utente sia proprietario dell'appID. Ulteriori dettagli sono disponibili nella sezione Collegamento di account di terze parti ad account di Steam riportata in alto.

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

Se stai utilizzando il servizio dell'inventario di Steam, assicurati che la proprietà itemdef dell'oggetto sia configurata correttamente come articolo promozionale ed effettua la chiamata a ISteamInventory::AddPromoItem dal client.
Se disponi di un tuo back-end proprietario, puoi effettuare la chiamata a ISteamUser::GetAuthSessionTicket dal client di gioco e utilizzare quindi ISteamUserAuth/AuthenticateUserTicket con ISteamUser/CheckAppOwnership per verificare la proprietà. Ulteriori informazioni...

Il codice controlla quale versione del software è sbloccata

Ogni versione del gioco deve presentare il proprio appID. Dal client di gioco, effettua la chiamata a ISteamUser::GetAuthSessionTicket e utilizza ISteamUserAuth/AuthenticateUserTicket con ISteamUser/CheckAppOwnership per verificare la proprietà. Ulteriori informazioni...