Php 用openid替换mysql用户身份验证
因此,我使用的是一个非常旧的系统,它使用一个人的mysql数据库凭据对网站进行身份验证(该数据库最初仅从命令行访问,但现在从php前端访问)。由于一些内部原因(以及为了保存用户的历史记录),我不得不保留旧的身份验证。我被指控向这个系统添加openid身份验证。不知何故,我需要能够在通过openid(顺便说一下,使用Zend框架)登录站点时检索用户的mysql用户名和密码。我曾经考虑过只需要在第一次登录时注册,用户必须提供他们的mysql凭据,但我不希望以明文形式存储密码。 我还考虑过清空每个人的mysql密码,只需手动设置用户的mysql用户名(而不是让用户提供,因为他们可以提供任何用户名)。 这正变成一场安全噩梦。有人对替代方案有什么建议吗Php 用openid替换mysql用户身份验证,php,mysql,security,zend-framework,openid,Php,Mysql,Security,Zend Framework,Openid,因此,我使用的是一个非常旧的系统,它使用一个人的mysql数据库凭据对网站进行身份验证(该数据库最初仅从命令行访问,但现在从php前端访问)。由于一些内部原因(以及为了保存用户的历史记录),我不得不保留旧的身份验证。我被指控向这个系统添加openid身份验证。不知何故,我需要能够在通过openid(顺便说一下,使用Zend框架)登录站点时检索用户的mysql用户名和密码。我曾经考虑过只需要在第一次登录时注册,用户必须提供他们的mysql凭据,但我不希望以明文形式存储密码。 我还考虑过清空每个人的
顺便说一下,这是在Linux服务器上运行的。另外,我不能使用mysql可插拔身份验证,因为mysql版本是5.0(可插拔身份验证需要mysql 5.5),不,我不能更新它。考虑到您不能明智地对CLI客户端执行openid身份验证(即使使用PAM),我强烈建议您不要试图协调openid用户和mysql用户,只需添加一个普通用户,通过openid验证的任何人都可以使用该用户连接到数据库。,因此您将无法从mysql提取明文密码。我想这给你留下了两个选择,你在问题中考虑了这两个选择:
- 用户第一次使用OpenID登录时,请使用应用程序已知的新密码替换MySQL中用户的密码。您的应用程序使用该密码登录到使用OpenID的任何用户的帐户 Con:使用OpenID的用户不能再使用直接MySQL身份验证,因为他们不再知道自己的密码。甚至不用MySQL命令行工具。这意味着曾经使用过OpenID的用户必须永远使用OpenID
- 当用户注册使用OpenID时,您的应用程序会修改他们的密码 Con:您的应用程序保留一个明文密码列表 Con:当用户自行更改MySQL密码时,应用程序将中断
- 对于每个使用OpenID的用户,为他们创建第二个MySQL用户,该用户具有通用密码。将分配给普通帐户的所有权限复制到此“影子”帐户 Con:普通用户和影子用户必须保持同步,这样,如果从一个添加或撤销了某些MySQL权限,也应该同时从另一个添加或撤销它们。忘记这样做会导致混乱