我正在更新使用表单身份validation的旧的ASP .NET 3.5 webforms应用程序。 需求是需要自动login经过身份validation的域用户,同时仍然允许外部用户像以前一样手动login。
要清楚:我需要找出当前login用户的名称,如果他们与服务器在同一个域,并使用此信息绕过旧的login系统。 并非所有用户都将在networking上。
我遇到的问题是,虽然我可以从.NET的Request.LogonUserIdentity获取已login的用户,但必须先禁用相关页面上的匿名访问才能工作。 会发生什么事情是,任何不被识别的人都会收到login提示login到域,但我不希望这样做,因为有些用户没有域内的用户帐户。
我能想到的唯一解决scheme是为域用户自动redirect的特殊login页面。 但如果他们可以直接访问任何页面会更好。
该站点在IIS 6.0上运行Windows Server 2003 R2。
谢谢。
最简洁的答案是不。 除非您完全打开了Windows身份validation(并且禁用了所有其他身份validation方法),否则用户将无法通过域或本地计算机进行身份validation…并且您将无法以编程方式访问此信息。
漫长的回答也是没有的。 匿名身份validation将覆盖Windows身份validation,如果它们都启用… IIS将跳过其他身份validation方法,如果启用匿名。 如果启用Windows身份validation(禁用了任何匿名),则IIS将发送Kerberos / NTLM质询,并且只有在提示后才会发送凭据。 Internet Explorer将发送Kerberos信息,而不会在Intranet区域内提示。 -克里斯
可能这个解决scheme不可用OOTB(开箱即用)。
我们在我们的环境中有SharePoint 2010,当通过IE浏览器打开时,它不会要求input凭据。 所有其他地方,每次访问时都要求域用户名和密码。 我相信,如果有任何解决scheme,MS会提供SharePoint的,因为这个提示是非常烦人的。
以前,对于一个项目有一个类似的要求,后来被转移到了表单身份validation(根据修改后的业务规则)。 现在,我预计在不久的将来也会面临类似的要求,自从过去的情况以来,我还没有看到这个要求的任何工作样本。
除了要求用户使用IE浏览器(这个东西),我想到的直接解决scheme是有一个浏览器插件,将与活动目录进行通信,并在后端处理这个问题。 不幸的是,即使有效,面对这个问题的大多数开发者(包括我)也不可能这样做。
我一直在研究这个问题,并且绞尽脑汁地想着如何让这个工作起来,最后把它弄清楚了。 所以我想我会给每个人我做的方式。 这不干净,但它会工作。 这个过程可以实现其他页面和创build页面的方法。
我用一个login表单创build了一个使用PHP的页面。 它使用LDAPS连接来authentication用户。 这工作正常。 然后,我想冒险并改变它,以便已经在域上的人不必login。通过阅读$ _SERVER ['REMOTE_USER']凭证字段,但需要我打开Windows身份validation。 这很好,但是它完全忽略了我的login表单,有几个用户是我们不想添加到AD中的debugging和testing用户和承包商,所以他们保存在MySQL数据库中。 没有login表单,他们不能login! 另外,如果用户使用Firefox,它不会传递$ _SERVER ['REMOTE_USER']证书。
为了修复login页面,我复制了页面,之后添加一个_SSO(单点login)。 所以现在我的应用程序是“www.mywebsite.com/testapp”,将是“www.mywebsite.com/testapp_sso/”。 一个将有Windows身份validation,一个与匿名login。 然后,我使用IIS7的URL Rewrite,所以当他们访问testapp时,他们的IP地址是$ _SERVER ['REMOTE_HOST'],在我们的子网内,它会把URL重写到_SSO文件夹。
下一步,您还可以为“firefox”_SERVER [“HTTP_USER_AGENT”]添加另一个URLredirect规则。 所以这会迫使每个人,即使他们在IP范围内,都会进入非_SSO页面。 所以,即使他们在我们的networking上,Firefox用户仍然可以看到其他人看到的好的login页面,而不是popup的Windows身份validation页面。
最后一步是添加URL掩码,以便用户不知道他们在testapp_SSO或testapp上。
这将是所有的用户方。 但是现在每次你想更新一个页面,你都必须把它复制到_SSO文件夹中。 您可以使用某些同步软件创build同步,但您也可以创build一个硬符号链接! 这两个文件夹之间的权限都将工作,你只需要更新一个。
是的,如果这是Linux,它会容易得多。 但是我们必须在这里使用IIS。