我有Users
表来存储用户详细信息和密码,并且应用程序的身份验证对此有用。
但我们希望在我们的系统中集成Facebook
和Google
登录,因此请告知相关的架构修改。
CREATE TABLE dbo.Users( UserId int IDENTITY(1, 1) PRIMARY KEY, UserTypeId int, -- Admin = 1, End User = 2. (We have a master table for this, but eliminating here for simplicity) UserName nvarchar(16) NOT NULL UNIQUE, UserPassword nvarchar(16), FirstName nvarchar(64), LastName nvarchar(64), DateOfBirth date, Gender char(1), PhoneNumber nvarchar(16), Email nvarchar(128) UNIQUE, IsActive bit, UpdateTime datetime default CURRENT_TIMESTAMP )
这就是我的想法:
1)一旦用户通过Facebook或Google进行身份验证,该应用程序将具有声明(emailId)
2)应用程序应验证Users表中是否存在emailId,如果存在,则允许登录。
Q1>那么这需要对用户表中现有的行进行任何更新吗?
Q2>如果用户记录不存在(基于emailId索赔记录)那么我认为我们应该在用户表中添加新记录?
Q3>如果是添加:用户名和密码值是什么?
Q4>用户(添加的记录)可以在没有Facebook登录的情况下进行正常登录吗?
感谢。
答案 0 :(得分:2)
要接受OpenID登录,您必须接受并存储用户的OpenID-URL。此URL标识用户就像电子邮件地址一样。
Q1:取决于:如果您想同时允许同一用户使用OpenID登录和正常登录,则必须在表中添加另一列。如果您不允许混合登录,则可以使用Email
列存储OpenID网址。
Q2:是的,如果您看到新的OpenID-URL,请将其处理为未知的电子邮件地址
问题3:您必须要求用户选择用户名 - 我假设您为当前用户执行相同的操作。如果您想同时允许同一用户登录,则必须要求用户设置密码 - 否则他们只能通过其OpenID提供商登录。
问题4:只有你确实要求输入用户名和密码(见问题3)
请注意,允许同一用户通过OpenID登录并使用传统的用户名/密码会引入潜在的安全问题:用户可能无法理解您要求他们设置密码并输入他们的密码Facebook(或谷歌)密码。或者他们可能根本不关心并在任何地方使用相同的密码。如果他们这样做并且您的数据库没有正确加密密码,您的数据库将存储Facebook名称和未加密的密码......即使只有10%的人在您的网站上使用相同的密码 - 想象一下他们可以做到这一点。