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

标签 php authentication openid

我接到了一项任务,要在我们的自定义 php 网络应用程序中实现“通过 Google Apps 帐户进行用户身份验证”。用户应该能够直接登录或使用谷歌帐户登录。

我正尝试为此使用 openID。我已阅读有关 openID 的信息并发现以下内容:

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

有一点不太清楚:

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

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

最佳答案

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

我猜您打算修改您的登录表单以显示不同的登录方法,假设是经典登录表单和“使用 Google 登录”按钮。

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

如果没有记录,您将像往常一样开始用户订阅过程,但您可以使用从 Google 获得的数据预填充用户数据。您会将记录保存在外部登录表和常用用户表中以保持它们的相关性。

如果记录已经存在,那么您将认为该用户已获得授权。您将不得不稍微调整当前的身份验证过程。

谈到灵 active ,最终,当您编写代码时,您可以考虑允许每个用户使用多个帐户和多个外部服务进行身份验证的想法。

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

关于php - 自定义 PHP 应用程序中的 OpenID 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26338969/

相关文章:

angularjs - Angular.js 中基于 OpenID 的身份验证(使用 Flask 后端)

google-app-engine - 带有 OpenID 的 App Engine remote_api

php - 如何通过单击按钮删除某些表格行

java - 如何使用 HttpURLConnection 处理 HTTP 身份验证?

php - 如何从 PHP 扩展中重载函数?

authentication - 在同一域中的多个站点上进行单点登录

java - 密码的每个字母都值得MD5吗?

python - 哪个 openid/oauth 库可以将 django 项目连接到 Google Apps 帐户?

PHP - 字符串和整数

php - 只是关于代码格式