C# ADFS-Windows集成或窗体身份验证

C# ADFS-Windows集成或窗体身份验证,c#,.net,adfs,C#,.net,Adfs,我正在配置一个ADFS服务器,并试图为我们的依赖方应用程序实现用户友好的登录 据我所知,目前有两个相关的选择: Windows身份验证:这是一个很好的单点登录提供商,但如果用户当前不在正确的Windows域中,则会提供一个不友好的弹出窗口 表单身份验证:无论用户来自何处,都会要求使用登录方法 我的问题是,是否有可能满足这些要求: 如果用户使用windows帐户登录,请提供SSO 否则,显示表单登录页面,让用户输入其windows凭据 一般来说,没有编程方式来检测用户是否在域中或不是来自网站

我正在配置一个ADFS服务器,并试图为我们的依赖方应用程序实现用户友好的登录

据我所知,目前有两个相关的选择:

  • Windows身份验证:这是一个很好的单点登录提供商,但如果用户当前不在正确的Windows域中,则会提供一个不友好的弹出窗口
  • 表单身份验证:无论用户来自何处,都会要求使用登录方法
我的问题是,是否有可能满足这些要求:

  • 如果用户使用windows帐户登录,请提供SSO
  • 否则,显示表单登录页面,让用户输入其windows凭据

一般来说,没有编程方式来检测用户是否在域中或不是来自网站。因为在您的站点配置Windows身份验证(并禁用匿名)时,会向浏览器发送ntlm质询,如果您不在域中,则会弹出凭据提示

实现这一点的方法是使用DNS,这是ADFS通过引入代理角色所推荐的。您将有内部DNS解析
login.yourcompany.com
到已启用windows身份验证的内部ADF,以及外部DNS解析
login.yourcompany.com
到已启用表单身份验证的代理ADFS角色。因此,您需要在DMZ上托管另一台服务器,以便网络/域之外的用户可以访问它

只有在一台ADFS服务器上才能做到这一点,除非您对同一台ADFS服务器上绑定到外部IP的人工网站进行了黑客攻击(即不受支持),并且该网站重定向到“/ADFS/ls/forms”

有关代理及其设置的详细信息


Matias

您可能会发现它很有趣,根据浏览器通知的用户代理字符串指导形成身份验证或集成身份验证:

谢谢,这似乎是一种方法。当我们在实施中确认这一点时,我会将其标记为答案。为一台服务器分配更多的IP地址相对容易,因此我们将尝试这样做。