存储oauth和本地身份验证方法的最佳实践?

| 如果我要运行一项服务,该服务允许用户通过“本地”用户名/密码组合进行身份验证,并且还提供任意数量的OAuth服务,那么该用户数据模型会是什么样? 通常,如果我自己处理所有登录名,则在\“ user \”数据库(假设MySQL)中,用户名和密码字段必须为非空。但是,如果我的用户只想使用Facebook登录,我将只存储Facebook自动令牌,而在本地没有任何用户名/密码。 此外,如果他们想使用Twitter凭据登录,然后再使用tumblr,然后再使用任何一种当今服务,该怎么办?我可以为每种类型保留一个字段,但这可能会有些麻烦。我是否最好保留另一个“身份验证方法”表以免缺少更好的用语,所以我可以在用户之间建立一对多关系,以及如何对它们进行身份验证? 基本上,我要问的是是否有人知道这种情况的行业标准最佳实践,或者可以向我指出正确的方向(或者是否有人实施了类似的方法对他们来说很有效)。一个用户,多种身份验证方法-保留该信息的最佳方法是什么? 如果我做出的任何假设无效,我深表歉意,请纠正我。     
已邀请:
        我不知道我的解决方案是否接近任何行业标准,但是我之前已经在多个应用程序中做到过这一点。 您的应用程序中的身份应从身份验证源中抽象出来。 我最终设置的内容是这样的:
User table:
id int
username varchar
email varchar
password varchar

Authentication profile table:
user_id int
service enum(\'website\',\'google\',\'facebook\')
token varchar
[为了进一步规范化,请使用服务元字段使服务成为自己的表。 ] 然后,您的身份验证脚本将执行以下操作: 查找用户名/电子邮件 识别已知的身份验证配置文件 查看输入是否针对任何已知的身份验证配置文件和auth进行验证,或返回无效的凭据 对于某些服务,您可能需要自动生成一些用户字段值,或者提示用户在首次身份验证期间输入,具体取决于您可以从该服务中获得哪种数据。     
        我认为您想要的是本地身份验证系统(可能是出于遗留原因?)以及对使用委托身份验证登录的用户的支持。委托身份验证的标准是OpenID。您可能需要查看OpenID使用者库和示例,这应该使您了解存储OpenID凭据的想法。不幸的是,Facebook和Twitter不支持OpenID,但是流程几乎相同,即您的数据模型不会改变。我们已经实现了一个OpenID使用方,以支持基于OpenID的登录和注册。为了支持本地身份验证,我们使用了OpenID提供程序。换句话说,我们既是消费者又是提供者。这样,即使本地身份验证系统也是基于标准的。现在回答您有关模式的问题-我们将源(本地,Twitter,Facebook,Google,Yahoo,AOL)和电子邮件作为复合密钥,以及身份验证表中的令牌和/或密码。我们让用户更改其显示名称,并拥有一个唯一的个性化网址,这也是该架构的一部分。用户可以选择在通过OpenID进入时设置密码,因为对于移动设备,他们需要密码(移动设备上并不需要很多OpenID支持)。 OAuth解决了一个稍微不同的用例,在这种情况下,您要处理的不仅仅是授权,而是身份验证。这有帮助吗?如果您有任何疑问,请随时发表评论,我很乐意提供更多详细信息-我现在不想在过多的信息上使您感到困惑。     

要回复问题请先登录注册