Documentation Steamworks
Authentification des comptes et vérification de la possession d'une application

Présentation

Steamworks expose plusieurs méthodes pour authentifier l'identité d'un compte 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 compte Steam

Chaque utilisateur ou utilisatrice Steam peut être identifié(e) de façon unique par un identifiant numérique 64 bits, appelé SteamID. Dans les API C++ de Steamworks, le SteamID est contenu dans un objet CSteamID. Vous pouvez récupérer le SteamID 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.

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 compte utilisateur entre son client de jeu 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 la personne 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 compte 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 compte 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 comprend 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. Pour ce faire, accédez à la page d'administration Steamworks de votre application, et sélectionnez « 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. Afin d'accéder à cette section de Steamworks, vous devez disposer de la permission « Gérer les signatures » pour l'application en question.
REMARQUE : ces clés doivent être stockées de manière sécurisée et ne doivent en aucun cas être distribuées au sein de votre application !

API Web Steamworks

Steam dispose d'une API Web fondé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 qui sont prévues pour un accès depuis des applications back-end de confiance. Vous trouverez plus de détails concernant l'API Web ici.

P2P ou serveurs de jeu

Tickets de session

Authentification d'un compte

Les étapes suivantes détaillent comment utiliser les tickets de session pour vérifier l'identité de quelqu'un entre son client de jeu (client A) et un autre client ou serveur de jeu (client B).

Voici 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 et joueuses 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 reçoit 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 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 connait l'identité du client A tant que ce rappel n'a pas été reçu, mais doit laisser la session multijoueur se poursuivre.
  • Si l'auteur de l'appel de 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'auteur de l'appel 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 propriété de l'AppID actuel. Si le compte n'est pas détenteur de l'AppID actuel, le champ m_eAuthSessionResponse de ISteamUser::ValidateAuthTicketResponse_t sera réglé sur k_EAuthSessionResponseNoLicenseOrExpired. Après avoir reçu le ticket de session d'un compte, et l'avoir transmis à ISteamUser::BeginAuthSession, ISteamUser::UserHasLicenseForApp peut alors être utilisé pour évaluer si ce compte est en possession d'un bloc de contenu téléchargeable spécifique.

Serveur principal

Tickets de session et API Web Steamworks

Authentification d'un compte

Les étapes suivantes détaillent comment utiliser les tickets de session pour vérifier l'identité de quelqu'un entre son client de jeu et un serveur sécurisé.

Vérification de possession

Une fois que l'identité de quelqu'un a été vérifiée, un serveur sécurisé peut utiliser la méthode de l'API Web ISteamUser/CheckAppOwnership pour vérifier si cette personne possède un AppID particulier, ou appeler ISteamUser/GetPublisherAppOwnership pour récupérer une liste de tous les AppID possédés par celle-ci et associés à la clé d'édition fournie.

Tickets d'application cryptés

Authentification d'un compte

Les étapes suivantes détaillent comment utiliser les tickets d'application cryptés pour vérifier l'identité de quelqu'un entre son client de jeu et un serveur sécurisé.

Vous trouverez un exemple d'implémentation de ces principes au sein du projet Exemple d'application utilisant l'API Steamworks (Spacewar) dans le SDK, notamment avec CSpaceWarClient::RetrieveEncryptedAppTicket et CSpaceWarClient::OnRequestEncryptedAppTicket.

Vérification de possession

Steam va créer des tickets d'application cryptés uniquement pour les personnes 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 également utiliser SteamEncryptedAppTicket::BUserOwnsAppInTicket pour évaluer si le compte en question possède un bloc spécifique de contenu téléchargeable.

Authentification basée sur le navigateur Web avec OpenID

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

Avec OpenID, la personne visite d'abord un site tiers depuis un navigateur Web. Si elle souhaite se connecter ou lier son compte à ce site en utilisant OpenID, elle sera dirigée vers un formulaire de connexion sur le site de la communauté Steam. Une fois qu'elle aura saisi ses identifiants de connexion Steam, elle sera automatiquement redirigée vers le site Web tiers. Quelques données supplémentaires spécifiques à OpenID seront ajoutées à l'URL de redirection. La bibliothèque OpenID du site peut ensuite utiliser ces données pour vérifier et obtenir le SteamID du compte en question.

Steam fournit les images suivantes utilisables par des sites tiers souhaitant inclure à leur interface un lien vers la page de connexion Steam :
Bouton de connexion à Steam (grand format, bordures larges)

Bouton de connexion à Steam (grand format, sans bordures)

Bouton de connexion à Steam (petit format)

Authentification d'un compte

L'implémentation Steam d'OpenID 2.0 peut être utilisée pour lier un compte utilisateur Steam à un autre compte sur un site Web tiers.
Vous pouvez trouver une liste des bibliothèques OpenID en open source sur le site d'OpenID. Voici comment utiliser OpenID pour vérifier l'identité de quelqu'un.
  • Configurez votre bibliothèque OpenID pour utiliser l'URL suivante comme URL du point de terminaison du fournisseur OpenID de Steam : https://steamcommunity.com/openid/.
  • Après authentification du compte, l'ID demandé contiendra le SteamID de ce compte. Le format de SteamID demandé est le suivant : http://steamcommunity.com/openid/id/<steamid>.

Vérification de possession

Une fois que l'identité de quelqu'un a été vérifiée, un serveur sécurisé peut utiliser la méthode de l'API Web ISteamUser/CheckAppOwnership pour vérifier si cette personne possède un AppID particulier ou appeler ISteamUser/GetPublisherAppOwnership pour récupérer une liste de tous les AppID possédés par celle-ci et associés à la clé d'édition de l'API Web fournie.

Exemples

Lier des comptes tiers à des comptes Steam

Les comptes tiers peuvent être liés à des comptes Steam en leur associant un SteamID.

Le SteamID de quelqu'un peut être récupéré de manière sécurisée soit dans le jeu, soit via un navigateur Web. Une fois que l'association initiale est effectuée, vous pouvez en toute sécurité autoriser l'accès au compte tiers en vérifiant simplement le SteamID d'une personne. Cela élimine le besoin pour les utilisateurs et utilisatrices Steam d'effectuer une connexion secondaire à des systèmes de comptes tiers. De plus, si de nouveaux comptes tiers peuvent être créés et liés automatiquement lorsqu'un nouveau SteamID est rencontré, l'utilisateur ou l'utilisatrice Steam n'aura jamais besoin d'être prévenu(e) qu'une authentification secondaire est en train de se dérouler. Au lieu de cela, son simple compte Steam peut autoriser l'accès à tous ses jeux, ce qui simplifie son expérience et supprime les barrières potentielles limitant l'installation et l'essai de nouveaux jeux.

Lier depuis un jeu

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

Lier depuis un navigateur Web

Steam est compatible avec la spécification OpenID 2.0. Vous pouvez ainsi permettre à votre clientèle de se connecter de manière sécurisée à leur compte Steam depuis votre site Web et récupérer leur SteamID. Pour en savoir plus sur les modalités d'utilisation d'OpenID avec Steam, reportez-vous à la section Authentification basée sur le navigateur Web avec OpenID.

Vérification de possession

Une fois que l'identité de quelqu'un a été vérifiée, un serveur sécurisé peut utiliser la méthode de l'API Web ISteamUser/CheckAppOwnership pour vérifier si cette personne possède un AppID particulier, ou appeler ISteamUser/GetPublisherAppOwnership pour récupérer une liste de tous les AppID possédés par celle-ci et associés à la clé d'édition de l'API Web fournie.

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

Steam dispose de plusieurs moyens pour qu'un titre authentifie un compte, supprimant ainsi le besoin d'une clé CD tierce. Nous avons compilé une liste des cas les plus communs pour les clés CD, et vous montrons comment implémenter chaque cas nativement avec Steam.

Accès à un forum privé

Il faudra que votre clientèle se connecte directement avec son compte Steam en utilisant OpenID. OpenID va renvoyer le SteamID 64 bits du compte en question, qui pourra ensuite être utilisé avec ISteamUser/CheckAppOwnership pour vérifier que la personne possède bien votre AppID. Vous trouverez plus d'informations ci-dessus, dans la section Lier des comptes tiers à des comptes Steam.

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

Utilisez OpenID et ISteamUser/CheckAppOwnership (comme indiqué ci-dessus) pour déverrouiller le contenu sur votre propre site. Vous pouvez également mettre en ligne la version sans DRM comme DLC facultatif et gratuit.

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

Il faudra que votre clientèle se connecte directement avec son compte Steam en utilisant OpenID. OpenID va renvoyer le SteamID 64 bits du compte en question, qui pourra ensuite être utilisé avec ISteamUser/CheckAppOwnership pour vérifier que la personne possède bien votre AppID. Vous trouverez plus d'informations ci-dessus, dans la section Lier des comptes tiers à des comptes Steam.

Distribution 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 comme item promotionnel et appelez ISteamInventory::AddPromoItem depuis le client.
Si vous avez votre propre interface d'items, vous pouvez appeler ISteamUser::GetAuthSessionTicket depuis le client du jeu et ensuite utiliser ISteamUserAuth/AuthenticateUserTicket avec ISteamUser/CheckAppOwnership pour vérifier la propriété. Vous trouverez plus d'informations ci-dessus, dans la section Serveur principal.

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 propriété. Vous trouverez plus d'informations ci-dessus, dans la section Serveur principal.