自定义PHP应用程序中的OpenID实现

时间:2014-10-13 11:30:11

标签: php authentication openid

在我们的自定义php网络应用程序中,我已经获得了通过Google Apps帐户"实施用户身份验证的任务。用户应该可以直接登录,也可以使用谷歌帐户登录。

我正在尝试使用openID。我读过有关openID的内容,发现如下:

在我们现有的用户表格中,我们将添加其他字段' openid_identity'。登录时,我们会将Google登录名和密码发送给Google并获得回复。从响应中,我们将获得用户的身份,然后通过将其与数据库中的身份相匹配,我们可以获得用户详细信息。

有一点不明确:

在我们的应用程序中,管理员可以创建用户。然后,用户可以使用他们的电子邮件(如john@myapp.com)和密码登录。

最初,在使用Google登录之前,我们的用户桌面是“openid_identity'字段将为空。我们如何才能首次处理OpenID登录?我们向用户展示了什么?与Google注销#'页?如果用户使用他们的Google邮件注册(例如' john@gmail.com'),我们怎样才能从用户表中知道他是哪个用户?

1 个答案:

答案 0 :(得分:0)

我建议实现另一个表来处理外部登录方法,而不是向当前用户表添加字段。这个"一对多"关系将有助于使您的应用程序更灵活:有一天您可能会被要求添加对Twitter,Github,Facebook登录的支持。

我猜您计划修改您的登录表单以提供不同的登录方式,让我们说一下经典的登录表单和一个" Login with Google"按钮。

然后我认为您应该计划这种情况:当用户通过Google进行身份验证时,Google Api会返回用户的电子邮件,并且您将检查外部登录表以查看该记录是否已存在。

如果没有记录,您可以照常启动用户订阅流程,但可以使用您从Google获得的内容预先填写用户的数据。您将记录保存在外部登录表和公共用户表中,使它们保持相关。

如果记录已经存在,那么您将该用户视为已授权。您必须稍微调整一下当前的身份验证过程。

在谈论灵活性时,最终,在编写代码时,您可以考虑允许每个用户使用多个帐户和多个外部服务进行身份验证。

我也会考虑使用这个作曲家包https://packagist.org/packages/google/apiclient来处理Google的Apis