支持外联网用户的ASP.NET表单身份验证和内联网用户的ADFS联合登录

时间:2013-04-25 23:28:25

标签: asp.net-mvc forms-authentication adfs2.0 ws-federation

我正在开发一个将部署在云中的asp.net MVC Web应用程序,并应支持以下身份验证方案:

  1. Intranet上的域用户的透明身份验证。这些用户无需登录即可访问该应用程序。
  2. 在互联网上为任意非域用户表单登录。应使用表单身份验证向这些用户显示登录页面,并且应用程序将在内部管理成员资格。
  3. 在公共互联网上为域用户表单登录。他们应该能够使用与非域用户相同的登录表单,而是使用他们的域凭据登录。
  4. 具有被动身份验证的Active Directory联合身份验证服务(ADFS)可以涵盖案例#1和#3。由于它重定向到联合提供程序的登录页面,因此它不包括#2案例。我理解我的应用程序的主动身份验证可能支持所有三种情况,但是没有太多关于如何实现它的文档。

    理想情况下,应用程序应该有一种方法可以使用ADFS联合提供程序对域用户名和密码进行身份验证。

    是否有人知道这是否可行,若然,怎么办?

2 个答案:

答案 0 :(得分:2)

此标准模式是带有拆分DNS的ADFS - 用于Intranet的IWA和用于Internet的Forms。

但是,ADFS只能对AD进行身份验证,因此无法实现选项2。

我建议将IdentityServer用于选项2 - 您可能必须根据您的“成员资格”自定义它,然后联合ADFS和IdentityServer。

IdentityServer是免费/开源的。

答案 1 :(得分:0)

要扩展nzpcmad的答案,您可以在信任关系>下的ADFS管理控制台中设置Active Directory以外的声明提供程序信任。声明提供商信任,他们有效地将ADFS与自定义STS服务链接。

您添加的条目将添加到ADFS网站内的Home Realm发现页面,以便向身份验证用户显示一个下拉列表,以基本上选择他们希望进行身份验证的声明提供程序。

自动登录仍然适用于选择Active Directory(ADFS提供商)的内部用户,而其他提供商的成员将被重定向到他们选择的声明提供商的网站,该网站通常会显示一个表单登录页面并进行身份验证一个后端成员资格数据库,所有外​​部用户(无法提供NTLM或Kerberos令牌都需要输入他们的详细信息 - 对于AD用户而言,这意味着他们必须输入他们的域\用户字符串(或用户@域) )和内部密码。

当然,您必须自己创建这些提供程序,在旧的WIF时代,这意味着使用相当笨重的自定义STS模板,但是现在您可以使用简单的基于OWIN的MVC5站点简化该过程。或者,正如nzpcmad建议的那样,您可以查看使用IdentityServer。