web-dev-qa-db-fra.com

Authentification API Steam

Avant de commencer, permettez-moi de dire que je ne sais absolument rien d'OpenID. Je ne veux même pas faire à quoi OpenID est utilisé, mais j'imagine que les gens le mentionneront, mais ce n'est pas ce que je recherche.

J'ai un logiciel. Ce logiciel nécessite que les utilisateurs fournissent leur nom d'utilisateur Steam lors de leur inscription. Ils ne se connectent pas via Steam, ils fournissent simplement leur nom d'utilisateur pour que les autres connaissent leur nom d'utilisateur Steam. Il n'y a donc pas besoin d'OpenID.

Je sais, je peux simplement ajouter un champ de texte et leur demander de répertorier leur nom d'utilisateur Steam et de l'appeler un jour. Cependant, ce faisant, les gens peuvent saisir à peu près n'importe quel nom d'utilisateur Steam qu'ils souhaitent et être fait. J'aimerais plutôt pouvoir confirmer leurs noms d'utilisateur.

Idéalement, il y aurait un bouton "authentifier le compte Steam". Les gens cliquent dessus, et il affiche un formulaire de connexion Steam. Les utilisateurs se connectent, puis Steam renvoie leur nom d'utilisateur (et peut-être quelques données supplémentaires, telles que leur avatar). Quelle serait la meilleure façon de faire cela?

20
Jason Axelrod

Il y a un besoin pour OpenID. C'est la méthode que Valve utilise en fonction de leur documentation .

Vous ne mentionnez pas dans quoi votre application est écrite, donc je ne peux que deviner que vous le faites via une page Web. Dans ce cas, je recommande d'utiliser la bibliothèque LightOpenID . À partir de là, cet exemple de code devrait pouvoir vous aider à démarrer.

<?php
require 'includes/lightopenid/openid.php';
$_STEAMAPI = "YOURSTEAMAPIKEY";
try 
{
    $openid = new LightOpenID('http://URL.TO.REDIRECT.TO.AFTER.LOGIN/');
    if(!$openid->mode) 
    {
        if(isset($_GET['login'])) 
        {
            $openid->identity = 'http://steamcommunity.com/openid/?l=english';    // This is forcing english because it has a weird habit of selecting a random language otherwise
            header('Location: ' . $openid->authUrl());
        }
?>
<form action="?login" method="post">
    <input type="image" src="http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_small.png">
</form>
<?php
    } 
    elseif($openid->mode == 'cancel') 
    {
        echo 'User has canceled authentication!';
    } 
    else 
    {
        if($openid->validate()) 
        {
                $id = $openid->identity;
                // identity is something like: http://steamcommunity.com/openid/id/76561197960435530
                // we only care about the unique account ID at the end of the URL.
                $ptn = "/^http:\/\/steamcommunity\.com\/openid\/id\/(7[0-9]{15,25}+)$/";
                preg_match($ptn, $id, $matches);
                echo "User is logged in (steamID: $matches[1])\n";

                $url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=$_STEAMAPI&steamids=$matches[1]";
                $json_object= file_get_contents($url);
                $json_decoded = json_decode($json_object);

                foreach ($json_decoded->response->players as $player)
                {
                    echo "
                    <br/>Player ID: $player->steamid
                    <br/>Player Name: $player->personaname
                    <br/>Profile URL: $player->profileurl
                    <br/>SmallAvatar: <img src='$player->avatar'/> 
                    <br/>MediumAvatar: <img src='$player->avatarmedium'/> 
                    <br/>LargeAvatar: <img src='$player->avatarfull'/> 
                    ";
                }

        } 
        else 
        {
                echo "User is not logged in.\n";
        }
    }
} 
catch(ErrorException $e) 
{
    echo $e->getMessage();
}
?>

En utilisant cela, il présentera à l'utilisateur un bouton d'identification de connexion Steam. Lorsque vous cliquez dessus, il redirige l'utilisateur vers la page de connexion de la communauté Steam. Après s'être connecté, l'utilisateur est redirigé vers votre page, que vous avez définie sur le constructeur LightOpenID. Si l'utilisateur a été validé, il extraira l'ID de joueur unique de la valeur retournée. Cette valeur renvoyée ressemble à http://steamcommunity.com/openid/id/76561197960435530, et vous avez juste besoin du 76561197960435530 partie.

À ce stade, vous pouvez interroger Steam pour obtenir des informations sur le joueur. Dans l'exemple fourni, l'utilisateur est interrogé et les informations de base du joueur s'affichent.

38
Andy