使用Active Directory对面向WWW的网站中的用户进行身份验证

时间:2010-03-13 13:10:31

标签: asp.net security iis dns

我正在寻找一个需要安全的新网络应用程序(如果没有其他原因我们将需要PCI(支付卡行业)认证)。

根据以前使用PCI(在域上)的经验,首选方法是使用集成的Windows身份验证,然后使用kerberos将应用程序一直传递到数据库(因此NT用户在数据库中具有权限) 。这允许更好的审计以及对象级权限(即最终用户无法读取信用卡表)。

有一些优点是即使有人破坏了网络服务器,他们也无法从数据库中收集任何/更多的额外信息。此外,Web服务器不存储任何数据库凭据(可能只是一个简单的匿名用户,对简单的网站配置只有很少的权限)

所以,现在我正在寻找将在公共互联网上的新网络应用程序。一个建议是拥有一个Active Directory服务器并在AD上为该站点的每个用户创建Windows帐户。然后,这些用户将被放入适当的NT组,以决定他们应该拥有哪些数据库权限(以及他们可以访问哪些页面)。

ASP.Net已经提供了AD成员资格提供者和角色提供者,因此实施起来应该相当简单。

围绕这个问题有很多问题 - 可扩展性,可靠性等......我想知道是否有人有这种方法的经验,或者更好的是,为什么要这样做/不要做到这一点。

赞赏任何输入

3 个答案:

答案 0 :(得分:4)

在项目中使用ADAM后,我发现它是熊。开发人员的文档可能很少,它有一些怪癖可以将它与完整的AD区分开来,最重要的是,我无法从MS那里得到关于它是否将在未来得到完全支持的直接答案。我得到的印象是,ADAM是个混蛋,新的联邦服务(ADFS)是他们想让人们去的地方。将ADAM存储从一个成员服务器移动到另一个成员服务器是一件痛苦的事。既然如此,我对ADAM的问题与商店的开发和维护有关,它绝对具有扩展能力和可靠性。也就是说,有时你需要深入研究100级LDAP /目录魔法,以确定它是什么或不在做什么。

对于面向公众的网站,AD / ADAM可能过度使用IMO。您可以使用SqlMembership提供程序之类的备用MembershipProviders来获得与凭据相关的良好安全级别。如果你想更进一步,你可以使用数据库加密(SQL Server至少具有内置的这种能力)来加密属于PII(个人身份信息)领域的信息,当然也会加密备份。数据库支持的身份验证存储的优势在于,您拥有数据库产品提供的所有工具,可以扩展,执行备份,控制访问等。

编辑:让我补充一点,使用.NET,您可以设置您的网站,使其在Windows用户下运行,并使用Windows身份验证连接到数据库(假设数据库支持它)。因此,不需要将凭证存储在配置文件中。但是,如果您因任何原因必须存储凭据,则可以使用DPAPI加密配置文件中的凭据。

ADDITION 作为回应有关保护加密密钥的问题,您有几个选择。首先是简单地哈希信用卡号码。这极大地简化了访问数据的任何问题,但这意味着客户必须为每次购买重新输入他们的卡号。如果您想记住客户的卡号,那么您将进入维护解密密钥的新领域。在这种情况下,您绝对应该对数据库使用Windows身份验证,并查看SQL Server 2008的可扩展密钥管理功能,该功能允许您将第三方密钥管理程序挂钩到SQL的加密功能中。这样,只有网站用户才能访问用于解密的密钥。还有其他解决方案可以确保网站不会受到损害。更担心的是有人获得了未检测到的数据库副本。以下是使用SQL Server进行PCI兼容的链接:

Deploying SQL Server 2008 Based on Payment Card Industry Data Security Standards (PCI DSS) Version 1.2.

答案 1 :(得分:1)

几个想法

运行AD / AM - Active Directory Application Mode

它很好地扩展。它与AD的核心代码相同。类似的管理能力。坚固可靠。适用于ASPNET AD成员资格提供程序。

它包含在Windows中。


还可以考虑通过ADFS 2探索联合身份系统。

与AD / AM不同,这种方法相当领先。 Microsoft尚未提供ADFS v2服务器的最终版本,但它处于“候选发布”阶段。如果你有胃作为早期采用者,ADFS2有可能采用联合身份方法。这意味着您可以接受来自各种现有来源的身份令牌:Google登录,yahoo登录,any OpenId source,并将其用作您网站上的身份。用户无需“注册”并对您进行身份验证。相反,您的站点将尊重某个受信任的第三方提供的身份和身份验证,并根据该身份执行授权。

答案 2 :(得分:1)

这不是直接的答案,但拥有AD用户帐户意味着您需要为该用户提供Windows CAL。另一种方法是向用户颁发客户端证书,并将客户端证书映射到IIS中的AD用户。

您可能还会考虑使用Windows 2008以及开源AzMan提供的SQL商店netsqlazman