LightOpenID использует только первый возвращенный AuthURL, несмотря на запуск отдельных сеансов PHP.

Вот мой код входа ниже, он довольно стандартный. Почему пользователь, который нажимает «Войти» в steamcommunity. Ниже этого кода приведен быстрый результат отладки, который я собрал вместе, который демонстрирует, что, хотя отправляются 2 AuthURL, по какой-то причине LightOpenID применяет первый возвращенный результат к каждому пользователю, пытающемуся пройти аутентификацию через Steam в одно и то же время. Т.е. заходим в steamcommunity и авторизуемся.

 <?
 ob_start();
 session_start();
if(isset($_GET['logout']))
{
    if(isset($_COOKIE[session_name()])):
        setcookie(session_name(), '', time()-7000000, '/');
    endif;

    if(isset($_COOKIE['login_user'])):
        setcookie('login_user', '', time()-7000000, '/');
    endif;

    session_unset();

    session_destroy();

    header("Location: index.php");
}

include "kern/apikey.php";
include "kern/openid.php";
$OpenID = new LightOpenID("xxxxxx.com");

if(!$OpenID->mode)
{
    if(isset($_GET['login']))
    {
        $OpenID->identity = "http://steamcommunity.com/openid";
        header("Location: " . $OpenID->authUrl());
    }
    if(!isset($_SESSION['SteamAuth']))
    {
        $login = "<div id=\"login\">In order to access the panel, you must <br /><br /> <a href=\"?login\"><img src=\"http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_large_noborder.png\"/></a></div>";
    }
} else if ($OpenID->mode == "cancel")
{
    echo "Authentication Cancelled...";
} else {
    if($OpenID->validate())
    {


        $id = $OpenID->identity;

        $_SESSION['SteamID64'] = str_replace("http://steamcommunity.com/openid/id/", "", $id);
        $_SESSION['SteamAuth'] = true;

        $Steam64 = str_replace("http://steamcommunity.com/openid/id/", "", $id);
        $profile = file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key={$api}&steamids={$Steam64}");
        $steam = json_decode($profile, true);
        $communityid = $steam['response']['players'][0]['steamid'];
        $authserver = bcsub($communityid, '76561197960265728') & 1;
        $authid = (bcsub($communityid, '76561197960265728')-$authserver)/2;
        $_SESSION['SteamID'] = "STEAM_0:" . $authserver . ":" . $authid;
        $_SESSION['SteamName'] = $steam['response']['players'][0]['personaname'];

        header("Location: index.php");
    } else {
        echo "User is not logged in";
    }
}

?>

<html>
<body>
<div id="title">Login</div>
<div id="content">
<?
    echo $login;
?>
</div>
</body>
</html>

См. приведенный ниже файл журнала, в котором указано, что AuthURL отправляется дважды, но на самом деле используется только один ответ:

[09-Nov-2014 14:09:52 America/Chicago] Begin login!
[09-Nov-2014 14:09:52 America/Chicago] Sent authurl!xxxxx

[09-Nov-2014 14:10:03 America/Chicago] Begin login!
[09-Nov-2014 14:10:03 America/Chicago] Sent authurl!xxxxx

[09-Nov-2014 14:10:10 America/Chicago] Begin login!
[09-Nov-2014 14:10:11 America/Chicago] Got identity!http://steamcommunity.com/openid/id/xxxx

[09-Nov-2014 14:10:11 America/Chicago] Using Steam64!xxxx

[09-Nov-2014 14:10:11 America/Chicago] Using string steam64!xxxx

Как видите, несмотря на то, что 2 AuthURL отправляются одновременно, как только возвращается одна идентификация, она применяется к обоим пользователям, то есть люди входят в неправильные учетные записи.

Эта проблема полностью воспроизводима на примере https://github.com/SmItH197/SteamAuthentication PHP.

Действия по воспроизведению: 1. Первый пользователь нажимает "Войти через стим", зависает при входе на steamcommunity.com OpenID. 2. Второй пользователь нажимает "Войти через steam", руками авторизируется на steamcommunity.com. 3. Затем оба пользователя переходят по ссылке, один из них войдет в систему как другой.


person Kamern    schedule 11.11.2014    source источник
comment
По какой причине вы разместили и точный дубликат вашего предыдущего (теперь удаленного) вопроса?   -  person Andy♦    schedule 11.11.2014
comment
Ага! Предыдущий был менее описательным — название описывало симптом проблемы, который теперь более ясен (т. е. раньше я обвинял вход в Steam, тогда как теперь я сузил его до запросов, которые обрабатываются как неуникальные). Я полагаю, что, поскольку заголовок является более описательным (и поскольку это то, что человек изначально видит, прежде чем щелкнуть вопрос), я могу найти кого-то, кто более разбирается в LightOpenID, а не конкретно в проблеме входа в Steam.   -  person Kamern    schedule 11.11.2014
comment
Я обновил вопрос примером сценария PHP, в котором возникает точно такая же проблема, если шаги воспроизводятся.   -  person Kamern    schedule 12.11.2014


Ответы (1)


Протестировал это на внешнем веб-сервере, оказалось, что это связано с конфигурацией сервера/PHP в будущем, не совсем уверен, почему это происходит или в чем причина, поэтому мое решение будет заключаться в том, чтобы переместить мой steamauth на другой сервер на данный момент.

person Kamern    schedule 11.11.2014