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 :
- entre un client de jeu et d'autres clients (P2P) ou serveurs de jeu, en utilisant des tickets de session ;
- entre un client de jeu et un serveur principal en utilisant :
- lorsqu'un utilisateur ou une utilisatrice est sur un navigateur Web, en utilisant OpenID et l'API Web Steamworks.
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).
- Le client A doit récupérer un ticket de session en appelant ISteamUser::GetAuthSessionTicket.
- Le client A doit envoyer son ticket de session au client B.
- Le client B doit passer le ticket du client A à ISteamUser::BeginAuthSession, qui effectuera une vérification de validité rapide. Si le ticket est valide, alors ISteamUser::BeginAuthSession va transférer le ticket à Steam, qui va vérifier que le ticket n'a pas été réutilisé et qu'il a été émis par la personne propriétaire du compte du client A. Le résultat de cette vérification sera renvoyé dans un rappel ISteamUser::ValidateAuthTicketResponse_t.
- Lorsque la session multijoueur prend fin :
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 :
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.