我正在尝试为我的网站实施OpenID身份验证。这里的情景:
我希望用户能够只使用OpenID的存储必要的OpenID信息
- 登录(用户可以只获得通过访问OpenID提供商验证无需创建电子邮件地址和密码定制的账户),
- 通过电子邮件/密码(用户通过填写表格在网站上注册)
- 将开放标识附加到他/她的帐户(openid +为一个帐户的电子邮件)。
现在我不知道我应该存储什么凭证来存放开放标识。并不确定数据库架构。这里的数据库模式:当用户登录时,无论是使用OpenID /自定义成员资格
Table: Users
UserId => PK
... => Custom info. Not related to authentication.
Table: Authentication
AuthenticationId => PK
LoginId => (when custom site membership => email address) (when openId => openid unique address)
UserId => FK to Users.
Provider =>(when custom site membership => "CUSTOM") (when openId => openid provider address)
Password => filled when using custom membership. empty when using open id.
现在,我只看验证表格,并查找证书并获得相应的用户。如果没有用户存在,我创建一个新用户并在认证表中添加一个条目。
主要问题:是存储
Provider
和LoginId
(见上述意见,看看有什么被存储在这些领域)足够的存储OpenID认证的?我是否应该存储任何其他数据,以便在用户返回时我可以根据我保存的数据对他/她进行身份验证?您是否建议使用其他更高效的方法来执行此操作?
谢谢。
我删除了'Provider'列,并添加了'bit'类型的'IsOpenId'。什么是分离认证表(用于openid和定制)的优点[而不是去除不必要的'密码'列openid认证]? – Kamyar
我加强了我对你的回答。 –
完美!谢谢。 – Kamyar