как использовать openid для системы входа на сайт, которая позволяет только авторизованным пользователям доступ к сайту - PullRequest
0 голосов
/ 02 января 2012

Я создаю сайт, который использует openid для входа в систему (вход в систему с учетными записями gmail / yahoo).Я хочу, чтобы только авторизованные пользователи (пользователи, чья информация уже сохранена в моей БД) должны иметь доступ к сайту.С помощью openid любой может войти в систему под своими учетными записями gmail / yahoo, но я не знаю, как проверить текущую информацию о пользователях в моей БД и разрешить доступ только авторизованным пользователям.Я использую светопенид для реализации openid.

Пожалуйста, дайте мне любые безопасные предложения.Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 02 января 2012

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

Идентификатор должен представлять собой уникальный URL-адрес, возвращаемый поставщиком OpenID (например, Gmail или MyOpenID).

0 голосов
/ 10 января 2012

LightOpenID предоставляет пример (посмотрите на файлы, которые вы загрузили). Если $openid является вашим LightOpenID экземпляром, вы идентифицируете пользователей по URL-адресу, хранящемуся в $openid->identity после того, как $openid->validate() вернет TRUE. Сравните эту строку с той, которая есть в вашей базе данных, и сохраните результаты (например, в сеансе PHP). После того, как пользователь подтвержден, вам не нужно использовать URL, если вы не хотите. Вы можете использовать свой локальный идентификатор пользователя, если хотите.

<?php
require 'openid.php';
try {
    # Change 'localhost' to your domain name.
    $openid = new LightOpenID('localhost');
    if(!$openid->mode) {
        if(isset($_POST['openid_identifier'])) {
            $openid->identity = $_POST['openid_identifier'];
            # The following two lines request email, full name, and a nickname
            # from the provider. Remove them if you don't need that data.
            $openid->required = array('contact/email');
            $openid->optional = array('namePerson', 'namePerson/friendly');
            header('Location: ' . $openid->authUrl());
        }
?>
<form action="" method="post">
    OpenID: <input type="text" name="openid_identifier" /> <button>Submit</button>
</form>
<?php
    } elseif($openid->mode == 'cancel') {
        echo 'User has canceled authentication!';
    } else {
        echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
    print_r($openid->getAttributes());
    }
} catch(ErrorException $e) {
    echo $e->getMessage();
}
0 голосов
/ 04 января 2012

Что ж, в соответствии с вашим делом пользователя такой встроенный механизм отсутствует, и вы нацелены на то, что я считаю, что я не являюсь частью OpenId или протокола OAuth.

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

Теперь, кому вы предоставите доступ к своим услугам, вы принимаете за проект. Как и в вашем случае, вы хотите предоставить доступ пользователям, чей Email-id находится в вашей базе данных, которым просто требуется некоторый код на стороне сервера с вашей стороны.

После того, как пользователь перенаправлен обратно из системы OpenID, все, что вам нужно, - это извлечь электронный идентификатор из ответа, проверить вашу БД и сделать все, что вы хотите сделать, основываясь на этой проверке.

Однако, прежде чем двигаться вперед, необходимо указать на некоторые аспекты.

  1. Некоторые системы OpenId не предоставляют электронную почту пользователя, поэтому обязательно учитывайте этот факт при разработке приложения.
  2. В альтернативном случае вы можете работать с идентификатором OpenID, как предложено bouke
0 голосов
/ 02 января 2012

Я не использовал только светопенид hybridauth

Но когда кто-то входит в систему через мой openid из Google, его адрес электронной почты предоставляется.Затем я сравнил бы это электронное письмо с данными, уже сохраненными в вашей базе данных, и связал бы их.

Проблема, которую вы можете обнаружить, заключается в том, что адрес электронной почты не отправляется на некоторых провайдеров только именем пользователя.Например, некоторые из моих пользователей в Твиттере имеют только имя пользователя и адрес электронной почты, но это может не быть проблемой для вас, если вы используете только Google и Yahoo

...