Web应用程序的OAuth实现

时间:2012-09-13 17:27:09

标签: web-applications architecture login oauth

设置如下:我有一个为组织构建的Web应用程序。这些组织可以使用单个用户名和密码将日志记录到其自定义系统中,也可以在系统中具有多个具有不同权限的用户名和密码。我们一直在我们自己的数据库中存储用户名和密码,但正在考虑使用OAuth,以便用户可以通过他们的Twitter,Facebook,GMail等凭据登录他们的系统(因此我们可以访问他们的个人资料,联系人等)所有用户都来到同一个登录页面。

我的问题是:

使用OAuth,如何让他们使用正确的权限登录到正确的系统?

他们是否会正常登录(使用我的网络应用程序的凭据),然后需要一个地方来指定“我想允许Twitter帐户”Example123“访问此系统”?

1 个答案:

答案 0 :(得分:0)

当前数据库中的每个用户名和密码将对应于未来数据库中每个服务提供商的用户ID。例如:

user_id | group_id | username | password | twitter_user_id | facebook_user_id | google_user_id
1001    | 3003     | fred     | abc123   | aaaaaaaa        | bbbbbbbb         | ccccccc

使用这样的结构,您可以继续使用现有的登录机制,并允许用户将他们的facebook / twitter / etc帐户链接到他们当前的登录名。我假设您已经在数据库中设置了某种形式的用户ID和组ID,但如果没有,那么我认为这将是最简单的路径。

有许多不同的方法可以将现有帐户与用户的各种服务提供商帐户相关联 - 这取决于您选择一个与您现有结构相匹配的帐户,并为您的用户提供最无缝的体验。用户可以将新服务提供商链接到其帐户的一个可能的网站流量可能是:

  • 用户导航到您网站的登录屏幕
  • 用户使用原始用户名和密码登录
  • 用户选择服务提供商(例如twitter)链接到他们的帐户
  • 用户被重定向到twitter
  • 用户在twitter oauth屏幕上输入他们的Twitter密码,并同意允许您的网站访问您所说的所需信息
  • twitter然后将用户重定向回您的oauth回调页面
  • 您获取返回的推特ID(以及Twitter返回的其他信息)并将其放在您的数据库中以对抗此用户
  • 用户现在只能使用Twitter登录

一旦用户启用了一个服务提供商,他们就有两种方法可以访问同一个帐户。

除了上述过程之外,我还建议添加审计跟踪,以便用户可以查看已对其帐户执行的操作。这可能取决于您可用的时间,但可能会让您在赛道上获得许多痛苦的客户支持。您可以告诉用户的信息越多,管理这些信息的权力就越大,您自己需要做的调查就越少,花在修复用户问题上的时间就越少。