Аутентификация API Steam

Прежде чем я начну, позвольте мне сказать, что я абсолютно ничего не знаю об OpenID. Я даже не хочу делать то, для чего используется OpenID, но я думаю, что люди будут упоминать об этом, но это не то, что я ищу.

У меня есть программное обеспечение. Это программное обеспечение требует, чтобы пользователи указывали свое имя пользователя Steam при регистрации. Они не входят в систему через Steam, а просто указывают свое имя пользователя, чтобы другие знали их имя пользователя Steam. Так что OpenID не нужен.

Я знаю, я могу просто добавить текстовое поле, и они укажут свое имя пользователя Steam и покончат с этим. Тем не менее, делая это, люди могут ввести практически любое имя пользователя Steam, которое они хотят, и все готово. Вместо этого я хотел бы иметь возможность подтвердить их имена пользователей.

В идеале должна быть кнопка «аутентифицировать учетную запись Steam». Люди нажимают на нее, и открывается форма входа в Steam. Люди входят в систему, а затем Steam возвращает их имя пользователя (и, возможно, некоторые дополнительные данные, такие как их аватар). Как лучше всего это сделать?


person Jason Axelrod    schedule 07.09.2013    source источник


Ответы (1)


Нужен OpenID. Это метод, который Valve использует в соответствии с их документацией.

Вы не упоминаете, на чем написано ваше приложение, поэтому я могу только догадываться, что вы делаете это через веб-страницу. В этом случае я рекомендую использовать библиотеку LightOpenID. Оттуда этот пример кода должен помочь вам начать работу.

<?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();
}
?>

Используя это, он предоставит пользователю кнопку Steam Login ID. При нажатии на нее пользователь будет перенаправлен на страницу входа в сообщество Steam. После входа в систему пользователь перенаправляется обратно на вашу страницу, которую вы установили в конструкторе LightOpenID. Если пользователь прошел проверку, он извлечет уникальный идентификатор игрока из возвращаемого значения. Это возвращаемое значение выглядит как http://steamcommunity.com/openid/id/76561197960435530, и вам нужна только часть 76561197960435530.

На этом этапе вы можете запросить Steam, чтобы получить информацию об игроке. В представленном образце пользователь опрашивается и отображается основная информация об игроке.

person Andy♦    schedule 08.09.2013
comment
››Есть ли способ реализовать вход с помощью openID в Android? ››Если нет, можно ли как-то разрешить пользователю войти в Steam? - person SID --- Choke_de_Code; 25.05.2015
comment
На данный момент это неточно. Поскольку протокол OpenID устарел OpenID Foundation, эта библиотека также устарела и, как таковая, больше не поддерживается. code.google.com/p/lightopenid - person Rafael; 10.07.2015
comment
Вы можете скачать библиотеку LightOpenID отсюда github.com/iignatov/LightOpenID. - person Daniels Šatcs; 15.03.2016