我们有几个客户使用我们的Web应用程序(不是Intranet),有些客户希望他们的登录应该与他们的组织Active Directory集成。 他们只是希望用户登录到他们的Windows帐户并可以访问Web应用程序而无需输入任何用户凭据。
我已经阅读了一些关于ADFS的文章,但仍然不确定如何集成或实现它。 任何建议的解决方案?
谢谢!
答案 0 :(得分:3)
如果您开发基于.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的依赖方。
您可以使用数据库中的凭据来识别用户,实际上您可以customize AD FS的整个登录页面和身份验证事件。但是,基本安装要求在Active Directory中定义每个用户。您还可以将数据库用作声明存储(AD FS将使用另一个数据库为依赖应用程序提供有关用户的信息)。请注意,如果您打算在AD FS后面使用AD,那么您的AD FS服务必须能够访问它并且LDAP查询它,如果您的用户登录到其本地域,则我不确定它是否适用于您AD FS不熟悉。
如果您不需要支持行业SSO标准协议(我已经提到过SAML 2.0),我不确定实现AD FS会是一个很好的解决方案。它迫使你以某种方式工作,这并不总是那么舒服。
答案 1 :(得分:1)
您的问题没有明确说明您是否仅限于使用ADFS实施SSO。 ADFS肯定是这样做的一种方式。您可能希望查看OpenID-LDAP (位于www.openid-ldap.org,但项目现已解散) 和其他identity providers作为替代方案实施SSO。
另一种方法是实现使用集成Windows身份验证的OpenID提供程序。他们可以将它安装在他们的DMZ中,然后将其暴露给互联网,而不是ADFS。它可能允许从Internet Explorer和Chrome进行单点登录。
实施OpenID提供程序是一件非常重要的事情。你必须密切注意安全。幸运的是,有许多框架如DotNetOpenAuth可以帮助你。
使用OpenID时,您的“云”应用程序将充当OpenID依赖,并从OpenID提供程序中获取其他属性中的声明标识符。您应该将其存储在数据库中以唯一标识用户。您可以选择实施OpenID提供程序,以便它还可以为您的云应用程序提供最少的信息,如电子邮件地址,人员姓名等。
使用OpenID的好处是,您的“云”应用程序可以继续支持其他知名的OpenID提供商,如Google和Yahoo,而无需进行太多更改。
最后,您需要向客户询问他们熟悉哪些技术。您会发现组织之间缺乏信任(商业特质)往往不是挑战而是技术。
答案 2 :(得分:0)
根据评论需要更多细节。
这里有一个很好的来源:AD FS 2.0 Content Map。
“电子书”是here。
我可以想象一种情况,您将云应用程序绑定到Azure ACS,您的客户在其AD之上安装ADFS并将其ADFS与ACS联合。这将为您提供所需的功能。
评论后更新:
ADFS只能针对AD进行身份验证。它无法对数据库进行身份验证。它可以从SQL Server DB获取属性,然后可以将其转换为声明,即它可以使用SQL DB进行授权。
如果要对SQL DB进行身份验证,可以有两种选择。