一个实用的用户认证系统有哪些建议?

4
我不想重复造轮子,因此我正在寻找一个现有的解决方案来创建一个简单的应用程序身份验证系统。我已经尝试过在应用程序中使用CardSpace或OpenID,但我无法说服管理层这些将是可行的解决方案。 当然,我可以只构建一个简单的登录对话框,其中用户名、域和(哈希)密码存储在数据库表中,我已经做过这样的事情很多次了。我讨厌这个解决方案,因为我觉得它只是一个弱选项。而且我不想花太多时间去尽可能地使整个登录系统更安全,特别是因为我怀疑应该存在现有的解决方案。
那么,在OpenID/OpenAuth和CardSpace之外,还有哪些身份验证解决方案可以从Delphi/WIN32应用程序中使用呢?
目前,该应用程序将被许多客户使用。大多数是单用户环境,虽然一旦添加了这个身份验证系统,一些客户可能会开始有两到五个用户。但我们希望支持一个需要允许大约500个不同用户在同一个应用程序上的客户。这些用户分布在约100个办公室,但他们都连接到同一个SQL Server数据库。(现在是MS Access,但我们正在让这个用户可以使用SQL Server。)更有趣的是,客户使用Citrix来集中用户系统,应用程序直接访问SQL Server数据库。这不是一个理想的设置,但客户并没有真正为此付费。我们只是建立了一个测试环境。一个概念验证,客户将为我们进行测试。缺陷将在以后解决。但现在我需要快速解决方案之一是一个实用的身份验证系统,我不需要写很多代码。

你们的管理层对Cardspace/OpenID有哪些问题?这可能有助于确定解决方案,或者帮助我们提供反驳论点。你们的身份验证解决方案有哪些要求? - Larry Watanabe
Cardspace已被证明有点不可靠。在我的系统上,Cardspace数据库变得损坏,因此我失去了一个帐户。另一位开发人员显然在他的系统上禁用了Cardspace,因此它甚至没有弹出。而且,一位经理完全困惑于他必须创建自己的卡才能登录。他错过了常规的用户名/密码系统。很难说服人们使用与他们习惯的完全不同的登录界面。 - Wim ten Brink
使用OpenID时,我们往往会遇到需要通过互联网访问ID提供者的问题。一些用户已经阻止了所有的出站IntERnet请求,因此他们需要一个可以在其IntrAnet上访问的内部OpenID提供者机制。但是大客户对于在公司内部安装Web服务器/服务也不太满意。 - Wim ten Brink
3个回答

1
它可能适用于您的目的,但为什么不向Windows询问当前域和用户名,并将它们用作唯一标识符呢?Windows已经完成了身份验证,并且它可以避免用户创建新密码或其他任何东西。我已经成功地使用了这个方法。我还可选地将机器名称包含在ID中,以使不同计算机上的相同用户也是唯一的。

并非所有用户都拥有唯一的Windows身份验证令牌。大约10%的用户以某种方式共享相同的Windows帐户。这些用户使用一种远程桌面应用程序,可以从任何Web浏览器中使用。但是服务器端软件仅使用单个Windows帐户,而不是每个用户一个帐户。 - Wim ten Brink

1
您是否考虑过使用SQL Server身份验证,不允许那些使用Access数据库的用户进行身份验证?
如果您使用新的SQL Server本机客户端和SQL Server 2005,可以使密码过期并从客户端应用程序更改密码。创建和管理用户帐户的所有工具都内置于SQL Server Management Studio中。如果您以后决定支持Windows身份验证,只需修改连接字符串即可。
我们有一个系统,其中网络上的用户使用Windows身份验证,因此他们无需担心其他用户名和密码。对于通过VPN和非域加入计算机访问系统的用户,他们使用SQL身份验证。
这是MSDN页面,介绍如何在SQL Server 2005中以编程方式处理密码
您确实需要确保已安装SQL Server本机客户端,但与ADO的其余部分相比,这很简单。

1

1
它不必便宜,只要能用于创建演示即可。但SSecurity看起来最有前途。 - Wim ten Brink
根据这个问题,我尝试了SSecurity。没有文档,而且似乎作者已经不再积极开发它了,但源代码在那里,看起来很不错。 - Leonardo Herrera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接