如何在网站中使用openid进行登录系统,只允许授权用户访问网站

时间:2012-01-02 09:39:09

标签: php openid lightopenid

我正在创建使用openid登录系统的网站(使用gmail / yahoo帐户登录)。我只想要授权用户(用户的信息。我已经存储在我的数据库中)应该访问网站。 使用openid,任何人都可以使用他们的gmail / yahoo帐户登录,但我不知道如何查看我的数据库的当前用户信息,并且只允许访问授权用户。我使用lightopenid进行openid实现。

请给我任何安全的建议。提前谢谢。

4 个答案:

答案 0 :(得分:3)

您应该将用户的OpenID标识符与其用户帐户相关联。然后,当用户登录时,检查标识符是否已链接到帐户。如果是,请允许登录。如果没有,请拒绝登录或允许他们将标识符绑定到帐户。

标识符应为OpenID提供商返回的唯一网址(例如Gmail或MyOpenID)。

答案 1 :(得分:0)

我还没有使用lightopenid hybridauth

但当有人通过我的openid从Google登录时,他们会提供电子邮件地址。 然后,我会将该电子邮件与已存储在您数据库中的数据进行比较并将其链接起来。

您可能会发现的问题是,某些提供商的电子邮件地址不会仅返回用户名。例如,我的一些Twitter用户只有一个用户名而没有电子邮件地址,但如果您只使用Google和Yahoo

,这对您来说可能不是问题。

答案 2 :(得分:0)

根据您的用户案例,没有这样的内置机制,您的目标是我认为不是OpenId或OAuth协议的一部分。

这些协议基于最终用户提供的用户ID /密码在此处提供身份验证。这意味着您可以要求用户与这些提供商进行验证,这些提供商会告诉您是否用户根据系统进行身份验证。

现在,您将获得对您的服务的访问权限是您的设计决定。在您的情况下,您希望授予对其电子邮件ID与您的数据库一起使用的用户的访问权限,这些用户只需要一些服务器端代码。

一旦用户从OpenID系统重定向回来,您只需从响应中提取电子邮件ID,并对您的数据库进行检查,并根据此检查执行您想做的任何事情。

然而,在你向前推进之前想要指出一些方面。

  1. 某些OpenId系统不提供用户电子邮件,因此请确保在设计应用程序时将此事实记入帐户。
  2. 在备用情况下,您可以使用bouke
  3. 建议的OpenID标识符

答案 3 :(得分:0)

LightOpenID提供了一个示例(查看您下载的文件)。如果$openidLightOpenID个实例,则在$openid->identity返回$openid->validate()后,您可以识别存储在TRUE的网址的用户。检查该字符串是否与数据库中的字符串相对应,并将结果存储在(例如)PHP会话中。验证用户后,如果您不想使用该URL,则无需使用该URL。如果您愿意,可以使用本地用户的ID。

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