集成openID和oauth作为网站登录,登录和认证系统

Sin*_*nan 16 php sql openid oauth

首先让我先说这个问题不是关于不同的openID和oAuth实现.有很多关于这些的课程.

我的问题是在验证用户身份后该怎么做:

  • 如何将此用户添加到数据库中的用户表?
  • 如何处理同一用户的不同登录?(Remy Sharp的例子为openID提供了一些建议)
  • 如何在数据库中结合oAuth和openID?

有任何想法吗?

Fro*_*røm 12

你的问题涉及到它的主要部分:

  1. 认证
  2. 授权

如果身份提供者(IP)是您自己的身份提供者(IP),通常两者的处理方式不同,这是迄今为止Web应用程序中最常见的设置.

使用Google等OpenId Provider时,身份验证部分会与您的控件分开.您将获得一个令牌,告诉您用户是否经过身份验证.令牌通常包含以下声明:名称,电子邮件和命名标识,其中最后一个是IP上标识的唯一标识.

到现在为止还挺好.

诀窍现在就像你问的那样,我如何授权这个用户

好吧,有几种方法可以解决这个问题.

首先,当您在系统中创建本地用户时,您可以根据从IP获得的声明预填充名称和电子邮件值.在此过程中,您可以开始并说明系统中存储了配置文件的所有用户都已获得授权,或者您可以开发进一步的流程,以添加您需要了解的有关用户的任何详细信息.

那么,如果用户从谷歌切换到Facebook作为IP,你怎么避免重新注册?

这是事情变得棘手的地方.Google,Yahoo,Facebook将向您提供的最常见声明是电子邮件地址和姓名.因此,您可以做的是尝试将应用程序中的现有客户与进程索赔相匹配.然而,这不是故障保护,因为人们可以在不同的系统中拥有不同的电子邮件.

名称值也不安全.

在我们的设置中,我们首先匹配电子邮件,因为我们知道大多数IP都会验证电子邮件地址.这将大大减少重复.在检查之后,我们开始自己的验证过程,其目标是查看此人是否已经注册.此过程在我们的数据库中查找客户的手机号码,如果找到匹配项,我们会向客户发送一次性密码以验证电话号码的正确所有权.

由于登录是一个时间敏感的设置,我们创建了一个简单的SQL表,将外部身份映射到我们的客户编号.这允许我们在所有Web应用程序之外实现这种验证逻辑(从而减少代码冗余)


Fly*_*ana 8

对我来说,最简单的方法就是拥有一个基本的用户表,在这里你可以在寄存器中添加用户,并有一个额外的1:n表,您可以在其中保存可能的身份验证.也许你需要多个表,如果有方法,需要比其他更多的列.