如何使用OpenID作为登录系统?

7
我想尝试在我即将制作的网站上使用OpenID作为登录系统。 我查看了这个网站,但我不确定它是如何工作以及如何使其工作的。 http://remysharp.com/2007/12/21/how-to-integrate-openid-as-your-login-system/ 现在清楚的是,OpenID使用URL而不是密码。 你能给我一些链接帮助我入门吗? 我需要了解高级PHP才能让它为我工作吗? 我只知道基础的PHP。

我们自己的StackOverflow使用OpenID。此外,大多数语言和框架都存在OID库。但这很简单。为了使用用户的OpenID登录,您需要重定向到OID指定的站点,如果该站点可以验证用户的身份,则会给您一个密钥来使用。该密钥就像是用户名的密码,即OID。因此,它与安全性一样高,甚至更高,但您将用户身份验证传递给发行站点。 - Robert
可能是 https://dev59.com/7HVD5IYBdhLWcg3wO5ED 的重复问题。 - Sandeepan Nath
2个回答

11

感谢Stackoverflow.com上的其他评论,我了解了LightOpenId。它非常容易使用。

示例代码可以直接运行(无需任何配置):

<?php
require 'openid.php';
try {
    $openid = new LightOpenID;
    if(!$openid->mode) {
        if(isset($_POST['openid_identifier'])) {
            $openid->identity = $_POST['openid_identifier'];
            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.';
    }
} catch(ErrorException $e) {
    echo $e->getMessage();
}

使用Google作为OpenID提供者

<?php
# Logging in with Google accounts requires setting special identity, so this example shows how to do it.
require 'openid.php';
try {
    $openid = new LightOpenID;
    if(!$openid->mode) {
        if(isset($_GET['login'])) {
            $openid->identity = 'https://www.google.com/accounts/o8/id';
            header('Location: ' . $openid->authUrl());
        }
?>
<form action="?login" method="post">
    <button>Login with Google</button>
</form>
<?php
    } elseif($openid->mode == 'cancel') {
        echo 'User has canceled authentication!';
    } else {
        echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
    }
} catch(ErrorException $e) {
    echo $e->getMessage();
}

这个按钮什么也不做 :) 它应该是一个 type="submit" 的输入框 :) 但是我在表单中从来没有用过除了一个按钮,所以也许我错了,如果我错了,请纠正我,但我不认为这会有什么问题.. - JamesM-SiteGen
这个很好用,直接从例子中复制即可 => http://gitorious.org/lightopenid/lightopenid/blobs/master/example-google.php 以便更快地访问。 - Alfred

3

1
lightopenid 更简单、更快速,适合初学者入门。 - Neil McGuigan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接