Non-affilié

Accueil Documentation et aide
Documentation Steamworks
Authentification de l'utilisateur et possession

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-Cheat (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 à api.steampowered.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, ISteamUser::UserHasLicenseForApp peut être utilisé pour déterminer si l'utilisateur possède un contenu téléchargeable spécifique.

Serveur principal

NOTE : vous ne pouvez pas utiliser cette méthode d'authentification de l'utilisateur pour les jeux qui ont recours au système Valve Anti-Triche (VAC).

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 à api.steampowered.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. Le serveur peut aussi utiliser SteamEncryptedAppTicket::BUserOwnsAppInTicket pour déterminer si l'utilisateur possède un Contenu téléchargeable (DLC) spécifique.

Authentification basée sur le navigateur Web avec OpenID

Steam est un fournisseur d'identité, comme décrit dans les spécifications d'OpenID 2.0. Dans un navigateur Web, un site Web tiers peut utiliser OpenID pour obtenir le SteamID d'un utilisateur qui peut être utilisé comme l'identifiant de connexion pour le site Web tiers, ou lié à un compte existant sur ce site Web.

Lorsqu'il utilise OpenID, l'utilisateur commence dans un navigateur Web sur le site Web tiers. Lorsque l'utilisateur souhaite se connecter ou lier son compte à ce site Web, grâce à OpenID, le site dirige l'utilisateur vers un formulaire de connexion sur le site Web de la communauté Steam. Une fois que l'utilisateur a saisi ses identifiants de connexion Steam, le navigateur Web de l'utilisateur est automatiquement redirigé vers le site Web tiers avec quelques données supplémentaires spécifiques à OpenID ajoutées à la fin de l'URL renvoyée. La bibliothèque OpenID du site peut ensuite utiliser ces données pour vérifier et obtenir le SteamID de l'utilisateur.

Steam fournit les images suivantes, qui peuvent être utilisées par des sites tiers quand ils incluent un lien sur la page d'inscription de Steam :
sits_large_border.png

sits_large_noborder.png

sits_small.png

Authentification de l'utilisateur

Vous pouvez utiliser l'implémentation d'OpenID 2.0 dans Steam pour lier un compte d'utilisateur Steam à son compte sur le site Web tiers.
Vous trouverez une liste des bibliothèques OpenID open source sur le site Web d'OpenID. Pour utiliser OpenID afin de vérifier l'identité d'un utilisateur :
  • 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 le 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

Un compte tiers peut être lié à un compte Steam en associant le SteamID de l'utilisateur à ce compte tiers.

Le SteamID d'un utilisateur peut être récupéré de manière sécurisée soit dans le jeu, soit via un navigateur Web. Une fois l'association initiale effectuée, vous pouvez autoriser l'accès au compte tiers en toute sécurité en vérifiant simplement le SteamID de l'utilisateur. Ainsi, les utilisateurs Steam n'ont pas besoin d'effectuer une connexion secondaire sur les systèmes de comptes tiers. De plus, si de nouveaux comptes tiers peuvent être créés automatiquement et liés lorsqu'un nouveau SteamID est rencontré, l'utilisateur Steam n'aura jamais besoin d'être prévenu qu'une authentification secondaire est en train de se dérouler. 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 offre plusieurs moyens d'authentifier un utilisateur pour un titre, supprimant ainsi le besoin d'une clé CD tierce. 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 ensuite être 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 propre 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. Consultez la section Lier des comptes tiers à des comptes Steam ci-dessus.

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

Si vous utilisez le service d'inventaire Steam, vérifiez que l'ItemDef de l'item est configuré correctement en tant qu'item promotionnel et appelez ISteamInventory::AddPromoItemdepuis le client.
Si vous avez votre propre back end d'items, vous pouvez appeler ISteamUser::GetAuthSessionTicket depuis le client du jeu et ensuite utiliser ISteamUserAuth/AuthenticateUserTicket avec ISteamUser/CheckAppOwnership pour vérifier la possession. 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...