9

我们有几个客户使用我们的 Web 应用程序(不是 Intranet),一些客户希望他们的登录应该与他们的组织 Active Directory 集成。他们只是希望该用户应该登录到他们的 Windows 帐户,并且可以在不输入任何用户凭据的情况下访问 Web 应用程序。

我已经阅读了一些关于 ADFS 的文章,但仍然不确定如何集成或实现它。任何建议的解决方案?

谢谢!

4

3 回答 3

5

如果您开发基于 .NET 的应用程序,Microsoft 提供了一个名为WIF的库,该库用于以 +- 舒适的方式与 AD FS 进行通信(配置 + 少量代码调整以从 AD FS 提供的身份验证消息中获取声明)。

AD FS 2.0 和 WIF 支持的协议很少,为了使 SSO 工作,最常见的协议是 (afaik) SAML 2.0和 WS-Federation。两者都是基于 XML 消息构建的,但如果您使用 WIF,则不需要了解详细信息。

对于 WS - Federation,WIF 库为 Visual Studio 提供了一个插件,它允许您将您的站点配置为 AD FS 的依赖方。

您可以使用数据库中的凭据来识别用户,您实际上可以自定义AD FS 的整个登录页面和身份验证事件。但是,基本安装需要在您的 Active Directory 中定义每个用户。您还可以将数据库用作声明存储(另一个数据库 AD FS 将用于为依赖应用程序提供有关用户的信息)。请注意,如果您打算在 AD FS 后面使用 AD,您的 AD FS 服务必须能够访问它并且 LDAP 查询它,如果您的用户登录到他们的本地域,我不确定这是否适合您AD FS 不熟悉。


如果您不需要支持行业 SSO 标准协议(我已经提到过 SAML 2.0),我不确定实施 AD FS 是否会是一个很好的解决方案。它迫使你以某种方式工作,这并不总是那么舒服。

于 2012-06-13T18:31:05.513 回答
1

您的问题没有明确说明您是否仅限于使用 ADFS 来实施 SSO。ADFS 无疑是实现此目的的一种方式。您可能希望查看 OpenID-LDAP (位于 www.openid-ldap.org,但该项目现已不存在)和其他身份提供者作为实现 SSO 的替代方案。

一种替代方法是实现一个使用集成 Windows 身份验证的 OpenID 提供程序。他们可以将其安装在他们的 DMZ 中,而不是 ADFS 将其安装到互联网上。它可能允许从 Internet Explorer 和 Chrome 进行单点登录。

实现 OpenID 提供者并非易事。您必须密切注意安全性。幸运的是,有许多像DotNetOpenAuth这样的框架可以帮助你。

使用 OpenID 时,您的“云”应用程序将充当 OpenID 依赖项,并从 OpenID 提供者那里获得声明的标识符以及其他属性。您应该将其存储在数据库中以唯一标识用户。您可以选择实施 OpenID 提供程序,以便它还可以为您的云应用程序提供最少的信息,例如电子邮件地址、人名等。

使用 OpenID 的好处是您的“云”应用程序可以继续支持其他知名的 OpenID 提供商,例如 Google 和 Yahoo,而无需进行太多更改。

最后,您需要询问您的客户他们对哪些技术感到满意。您会发现组织之间缺乏信任(一种业务特征)往往是挑战而不是技术。

于 2012-06-13T17:30:20.997 回答
0

根据评论需要更多细节。

这里有一个很好的来源:AD FS 2.0 Content Map

“电子书”就在这里

我可以想象一种场景,您将云应用程序绑定到 Azure ACS,您的客户将 ADFS 安装在他们的 AD 之上并将他们的 ADFS 与 ACS 联合。这将为您提供所需的功能。

评论后更新:

ADFS 只能针对 AD 进行身份验证。它无法针对数据库进行身份验证。它可以从 SQL Server DB 中获取属性,然后将其转换为声明,即它可以使用 SQL DB 进行授权。

如果要针对 SQL DB 进行身份验证,可以有两种选择。

  1. 创建自定义 STS
  2. 使用允许此功能的现有“自定义”STS,例如Identity Server 。
于 2012-06-13T00:55:00.063 回答