Documentation Steamworks
Authentification de l'utilisateur et possession

Nouvelle version disponible en anglais

La version anglaise de cette page a été mise à jour depuis la dernière publication des traductions.
Cliquez ici pour consulter la version anglaise de cette page.

Présentation

Steamworks expose plusieurs méthodes pour authentifier l'identité d'un utilisateur Steam et pour vérifier s'il possède une application. Ce document décrit chacune de ces méthodes d'authentification dans les scénarios suivants :

Identifier un utilisateur dans Steam

Chaque utilisateur Steam peut être identifié de façon unique par un identifiant numérique 64 bits, appelé SteamID de l'utilisateur. Dans les API C++ de Steamworks, le SteamID d'un utilisateur est contenu dans un objet CSteamID. Vous pouvez récupérer le SteamID de l'utilisateur actuel en appelant ISteamUser::GetSteamID, puis récupérer l'ID 64 bits en appliquant la fonction CSteamID.ConvertToUint64() à la valeur renvoyée.

Les méthodes d'authentification suivantes peuvent être utilisées pour vérifier de manière sécurisée le SteamID de l'utilisateur.

API présentées dans ce document

Tickets de session

Les tickets de session sont des tickets signés qui peuvent être utilisés pour vérifier l'identité d'un utilisateur entre le client de jeu de l'utilisateur et n'importe quel nombre d'autres clients de jeu (comme dans une session multijoueur pair-à-pair) ou vers un serveur de jeu dédié ou un serveur d'écoute (à l'aide de l'API ISteamGameServer). Ces tickets peuvent aussi être utilisés pour vérifier à qui appartiennent le jeu actuel et les contenus téléchargeables liés, ainsi que pour déterminer si l'utilisateur est sous le coup d'un bannissement VAC (voir Valve Anti-triche (VAC) et bannissements en jeu).
Les tickets de session peuvent aussi être utilisés pour vérifier l'identité d'un utilisateur entre un client de jeu et un serveur principal sécurisé à l'aide de l'API Web Steamworks. Cela nécessite que le serveur sécurisé puisse faire des requêtes HTTPS à partner.steam-api.com.

Tickets d'application cryptés

Les tickets d'application cryptés peuvent être utilisés pour vérifier l'identité d'un utilisateur entre un client de jeu et un serveur principal sécurisé. À la différence des tickets de session, la vérification des tickets d'application cryptés ne nécessite pas que le serveur sécurisé puisse faire des requêtes HTTPS. Au lieu de cela, une bibliothèque C++ et une clé symétrique privée sont utilisées par le serveur sécurisé pour vérifier le ticket. Le SDK Steamworks inclut les versions 32 bits et 64 bits de cette bibliothèque pour Windows et Linux sous le répertoire public/steam/lib.
Avant d'utiliser des tickets d'application cryptés, vous devez générer une clé privée pour chaque titre. Vous pouvez faire cela en sélectionnant « Modifier les paramètres Steamworks » pour votre application, puis « Authentification SDK » depuis le menu déroulant « Sécurité ». Cette clé sera associée à l'AppID de votre titre et à tout contenu téléchargeable pour ce titre.

NOTE : ces clés doivent être stockées de manière sécurisée et ne doivent en aucun cas être distribuées à l'intérieur de votre application !

API Web Steamworks

Steam expose une API Web basée sur HTTP qui peut être utilisée pour accéder à de nombreuses fonctionnalités de Steamworks. L'API contient des méthodes publiques accessibles depuis n'importe quelle application capable d'effectuer une requête HTTP, comme un client ou un serveur de jeu. L'API contient également des méthodes protégées qui nécessitent une authentification et sont prévues pour qu'on y accède depuis des applications de back end fiables. Vous trouverez plus de détails sur l'API Web ici.

P2P ou serveurs de jeu

Tickets de session

Authentification de l'utilisateur

Les étapes suivantes décrivent comment utiliser les tickets de session pour vérifier l'identité d'un utilisateur entre le client de jeu de l'utilisateur (client A) et un autre client ou serveur de jeu (client B) :

Quelques remarques importantes à propos des tickets de session :
  • Les tickets de session ne doivent être utilisés qu'une seule fois. ISteamUser::GetAuthSessionTicket doit être appelé pour chaque client de la session multijoueur qui effectue une requête de ticket.
  • Si les tickets de session sont utilisés pour authentifier des joueurs dans une session multijoueur pair-à-pair, chaque client de jeu devra vérifier l'identité de tous les autres clients de jeu de la session multijoueur.
  • Quand vous avez terminé avec un ticket de session, il faut appeler ISteamUser::CancelAuthTicket pour chaque handle renvoyé par ISteamUser::GetAuthSessionTicket.
  • Lorsque le client A appelle ISteamUser::CancelAuthTicket, le client B va recevoir un rappel ISteamUser::ValidateAuthTicketResponse_t indiquant que le ticket du client A n'est plus valide.
  • Lorsque le client A quitte une partie avec le client B, si l'appel par le client A de ISteamUser::CancelAuthTicket est traité avant l'appel de ISteamUser::EndAuthSession par le client B, alors le client B peut recevoir un rappel ISteamUser::ValidateAuthTicketResponse_t indiquant que le ticket a été annulé. Étant donné que le client A quitte la partie suite à un accord mutuel, ce rappel peut être ignoré.
  • Les conditions réseau peuvent empêcher le back end de Steam de fournir un rappel à l'auteur de l'appel de ISteamUser::BeginAuthSession pendant une durée indéfinie. L'auteur de l'appel de ISteamUser::BeginAuthSession (client B) ne doit pas supposer qu'il connaît l'identité du client A tant que ce rappel n'a pas été reçu, mais doit laisser la session multijoueur se poursuivre.
  • Si celui qui appelle ISteamUser::BeginAuthSession reçoit un rappel ISteamUser::ValidateAuthTicketResponse_t indiquant que le ticket du client A n'est pas valide, il doit refuser de continuer la session multijoueur avec le client A. Si les autres pairs de la partie ne refusent pas de jouer avec le client A, l'appelant doit quitter la session multijoueur.
  • ISteamGameServer expose les mêmes méthodes de ticket de session pour effectuer une authentification entre un client de jeu et un serveur de jeu.

Vérification de possession

Lors de l'utilisation de tickets de session, Steam va automatiquement vérifier la possession de l'AppID actuel. Si l'utilisateur ne possède pas l'AppID, alors la valeur k_EAuthSessionResponseNoLicenseOrExpired sera affectée au champ m_eAuthSessionResponse de ISteamUser::ValidateAuthTicketResponse_t. Après avoir reçu le ticket de session d'un utilisateur et l'avoir passé à ISteamUser::BeginAuthSession, on peut utiliser ISteamUser::UserHasLicenseForApp pour déterminer si l'utilisateur possède un contenu téléchargeable spécifique.

Serveur principal

Tickets de session et API Web Steamworks

Authentification de l'utilisateur

Les étapes suivantes décrivent comment utiliser les tickets de session pour vérifier l'identité d'un utilisateur entre le client de jeu de l'utilisateur et un serveur sécurisé :
  • Le client doit récupérer un ticket de session en appelant ISteamUser::GetAuthSessionTicket.
  • Pour garantir un ticket valide, le client doit attendre le rappel ISteamUser::GetAuthSessionTicketResponse_t.
  • Le client doit envoyer son ticket de session au serveur sécurisé.
  • Le serveur sécurisé doit envoyer une requête HTTPS à partner.steam-api.com et appeler la méthode Web ISteamUserAuth/AuthenticateUserTicket, en passant le ticket de session de l'utilisateur en tant que chaîne encodée en hexadécimal au format UTF-8. Veuillez noter que cette méthode autorise soit une clé d'API Web Steam soit une clé éditeur d'API Web qui est associée à l'AppID pour que le ticket fourni soit passé. Dans une future mise à jour, cette API pourrait renvoyer plus d'informations à l'appelant quand une clé éditeur d'API Web est fournie.
  • Si le ticket de l'utilisateur est valide, ISteamUserAuth/AuthenticateUserTicket renverra le SteamID 64 bits de l'utilisateur.

Vérification de possession

Une fois l'identité d'un utilisateur vérifiée, un serveur sécurisé peut utiliser la méthode de l'API Web ISteamUser/CheckAppOwnership pour vérifier si l'utilisateur possède un AppID particulier, ou appeler ISteamUser/GetPublisherAppOwnership pour récupérer la liste de tous les AppID possédés par l'utilisateur qui sont associés à la clé éditeur fournie.

Tickets d'application cryptés

Authentification de l'utilisateur

Les étapes suivantes décrivent comment utiliser les tickets d'application cryptés pour vérifier l'identité d'un utilisateur entre le client de jeu de l'utilisateur et un serveur sécurisé :

Vous trouverez un exemple d'implémentation dans le projet Exemple d'application utilisant l'API Steamworks (Spacewar), dans le SDK, plus précisément CSpaceWarClient::RetrieveEncryptedAppTicket et CSpaceWarClient::OnRequestEncryptedAppTicket.

Vérification de possession

Steam va créer des tickets d'application cryptés uniquement pour les utilisateurs qui possèdent l'AppID pour lequel le ticket a été créé. Après avoir décrypté un ticket d'application crypté, le serveur sécurisé peut utiliser SteamEncryptedAppTicket::BIsTicketForApp pour vérifier que l'AppID du ticket correspond à l'AppID du titre. The server can also use SteamEncryptedAppTicket::BUserOwnsAppInTicket to determine if the user owns a specific piece of Contenu téléchargeable (DLC).

Authentification basée sur le navigateur Web avec 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. La bibliothèque OpenID du site peut ensuite utiliser ces données pour vérifier et obtenir le SteamID de l'utilisateur.

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

Authentification de l'utilisateur

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:
  • configurez votre bibliothèque OpenID pour utiliser l'URL suivante comme URL du point de terminaison de l'OP de Steam : https://steamcommunity.com/openid/ ;
  • après authentification de l'utilisateur, l'ID demandé contiendra le SteamID de cet utilisateur. Le format de SteamID demandé est le suivant : http://steamcommunity.com/openid/id/<steamid>.

Vérification de possession

Une fois l'identité d'un utilisateur vérifiée, un serveur sécurisé peut utiliser la méthode de l'API Web ISteamUser/CheckAppOwnership pour vérifier si l'utilisateur possède un AppID particulier ou appeler ISteamUser/GetPublisherAppOwnership pour récupérer la liste de tous les AppID possédés par l'utilisateur qui sont associés à la clé éditeur d'API Web fournie.

Exemples

Lier des comptes tiers à des comptes 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. Ainsi, les utilisateurs Steam n'ont pas besoin d'effectuer une connexion secondaire sur les systèmes de comptes tiers. Additionally, if new 3rd party accounts can be automatically created and linked when a new SteamID is encountered, the Steam user will never have to be aware that a secondary authentication is taking place at all. Au lieu de cela, son simple compte Steam peut lui autoriser l'accès à tous ses jeux, ce qui simplifie l'expérience de l'utilisateur et supprime les barrières potentielles à l'installation et l'essai de nouveaux jeux.

Lier depuis le jeu

Les tickets de session peuvent être utilisés pour vérifier l'identité d'un utilisateur entre un client de jeu et un serveur principal sécurisé utilisant l'API Web Steamworks :

Lier depuis un navigateur Web

Steam est compatible avec la spécification OpenID 2.0. Vous pouvez ainsi permettre aux utilisateurs de se connecter de manière sécurisée à leurs comptes Steam depuis votre site web et récupérer leur SteamID. Pour plus de détails sur la façon d'utiliser OpenID avec Steam, consultez cette section.

Vérification de possession

Une fois l'identité d'un utilisateur vérifiée, un serveur sécurisé peut utiliser la méthode de l'API Web ISteamUser/CheckAppOwnership pour vérifier si l'utilisateur possède un AppID particulier ou appeler ISteamUser/GetPublisherAppOwnership pour récupérer la liste de tous les AppID possédés par l'utilisateur qui sont associés à la clé éditeur d'API Web fournie.

Migrer depuis des clés CD tierces vers les vérifications de possession natives de Steam

Steam itself has a number of ways a title can authenticate a user with, removing the need for a third-party CD key. Nous avons compilé une liste des cas les plus communs pour les clés CD accompagnés de conseils sur la façon dont vous pouvez implémenter chaque cas nativement avec Steam :

Accès à un forum privé

Il faudra que vos utilisateurs se connectent directement avec leur compte Steam en utilisant OpenID. OpenID va renvoyer le SteamID 64 bits de l'utilisateur, qui peut être ensuite utilisé avec ISteamUser/CheckAppOwnership pour vérifier que l'utilisateur possède bien votre AppID. Vous trouverez plus de détails ci-dessus, dans le paragraphe Lier des comptes tiers à des comptes Steam.

Déverrouiller le build d'un jeu non Steam sans DRM

Utilisez OpenID et ISteamUser/CheckAppOwnership (documentés ci-dessus) pour déverrouiller le contenu sur votre site. Vous pouvez également télécharger le build sans DRM en tant que DLC facultatif et gratuit.

Le logiciel est vendu sur mon propre site Web et peut être déverrouillé avec une clé

Il faudra que vos utilisateurs se connectent directement avec leur compte Steam en utilisant OpenID. OpenID va renvoyer le SteamID 64 bits de l'utilisateur, qui peut ensuite être utilisé avec ISteamUser/CheckAppOwnership pour vérifier que l'utilisateur possède bien votre AppID. More details can be found in Lier des comptes tiers à des comptes Steam above.

Drops d'items en jeu pour enregistrer votre clé tierce

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. En savoir plus…

La clé contrôle quelle version du logiciel est déverrouillée

Chaque version de votre jeu doit posséder son propre AppID. Depuis le client du jeu, appelez ISteamUser::GetAuthSessionTicket, puis utilisez ISteamUserAuth/AuthenticateUserTicket avec ISteamUser/CheckAppOwnership pour vérifier la possession. En savoir plus…