我讨厌重新发明轮子,所以我正在寻找一种现有的解决方案来为我的应用程序创建一个简单的身份验证系统。我已经在应用程序内部使用CardSpace或OpenID进行了一段时间的实验,但我不能说服管理层这些将是有效的解决方案。 当然,我可以构建一个简单的登录对话框,其中用户名,域和(哈希)密码存储在数据库表中,我已经做了很多次这样的事情。我讨厌这个解决方案,因为我觉得这只是一个弱选择。我不想花太多时间试图让整个登录系统尽可能安全,特别是因为我怀疑应该有现成的解决方案。
那么,在OpenID / OpenAuth和CardSpace旁边,还有其他可以在Delphi / WIN32应用程序中使用的身份验证解决方案吗?
<小时/> 目前,该应用程序将被许多客户使用。大多数是单用户环境,尽管一旦添加此身份验证系统,其中一些可能会开始有2到5个用户。但我们希望支持需要在同一应用程序上允许大约500个不同用户的客户。它们分布在大约100个办公室,但它们都连接到同一个SQL Server数据库。 (MS Access现在,但我们正在使这个用户可以使用SQL Server。)为了使问题更加有趣,客户使用Citrix集中用户系统,应用程序可以直接访问SQL Server数据库。这不是一个理想的设置,但再一次,客户并没有真正为此付出代价。我们只是建立一个测试环境。客户将为我们测试的概念验证。缺陷将在稍后解决。但是现在我需要快速解决方案,其中一个是实用的身份验证系统,我不需要编写大量代码。
答案 0 :(得分:1)
我会建议
所以,这里有一些解决方案:
http://www.torry.net/pages.php?id=313
CoWindowsAccount v.1.0
SSecurity v.1.2.1.3
http://free-password-manager-plus.software.informer.com/1.6/
答案 1 :(得分:1)
它可能适用于您的目的,但为什么不向Windows询问当前域和用户名,并将它们用作唯一ID。 Windows已经完成了身份验证,它可以保存用户编写新密码或任何内容。我用这个效果很好。我还可以选择在ID中包含机器名称,以便不同计算机上的同一用户也是唯一的。
答案 2 :(得分:1)
您是否考虑过使用SQL Server身份验证而不允许对使用Access数据库的用户进行身份验证?
如果您使用新的SQL Server Native Client和SQL Server 2005,则可以使密码过期并从客户端应用程序更改密码。所有用于创建和管理用户帐户的工具都内置在SQL Server Management Studio中。如果您稍后决定支持Windows身份验证,则只需修改连接字符串。
我们有一个系统,网络上的用户使用Windows身份验证,因此他们无需担心其他用户名和密码。对于通过VPN和非域加入计算机访问系统的用户,他们使用SQL身份验证。
以下是有关处理passwords programmatically in SQL Server 2005
的MSDN页面您确实需要确保SQL Server Native Client is installed,但与ADO的其他部分相比,这很简单。