集成openID和oauth作为网站登录,登录和身份验证系统

2022-08-31 01:05:46

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

我的问题是在对用户进行身份验证后该怎么办:

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

有什么想法吗?


答案 1

你的问题必须主要部分:

  1. 认证
  2. 授权

通常,如果标识提供者 (IP) 是你自己的,则不会对两者区别对待,到目前为止,这一直是 Web 应用中最常见的设置。

使用 OpenId 提供程序(如 Google)时,身份验证部分与您的控件分离。您将获得一个令牌,告诉您用户是否已通过身份验证。令牌通常包含以下声明:名称、电子邮件和命名标识,其中最后一个是 IP 处标识的唯一 ID。

目前为止,一切都好。

诀窍是现在,正如你问的,我如何授权这个用户

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

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

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

这就是事情变得棘手的地方。谷歌,雅虎,Facebook将为您提供的最常见的声明是电子邮件地址和姓名。因此,你可以做的是尝试将传入声明与应用中的现有客户相匹配。然而,这并不是万无一失的,因为人们可以在不同的系统中拥有不同的电子邮件。

名称值也不安全。

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

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


答案 2

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


推荐