我正在开发一个Asp.Net应用程序,它尝试连接到活动目录以进行登录。我知道我没有使用“最佳实践”来执行此操作,因此我将源代码附加到“Default.vb”中:
Dim User As System.Security.Principal.IPrincipal
Dim username As String
User = System.Web.HttpContext.Current.User
username = User.Identity.Name
如果User.Identity.IsAuthenticated那么
'好吧做点什么否则 '做某些人
结束如果
当我使用Chrome和Internet Explorer都没问题时:用户自动被签名为“已登录”。但是,如果我打开Firefox,它会用他的“内部”输入框询问用户名和密码...我不知道如何解释... firefox要求用户和密码:如果我输入我的活动目录用户名和密码(用于例如,我输入用户:MYCOMPANYDOMAIN \ stighy),然后我输入...
所以..我做错了什么?
答案 0 :(得分:1)
默认情况下,firefox不会自动发送NTLM凭据。
但是可以通过浏览器设置覆盖它。
在大多数情况下,更改人员设置是不切实际的。
但是,如果您正在开发基于Intranet的应用程序,则可能需要在需要的客户端计算机上进行更改。我听说您可以使用组策略一起更改设置。
的内容看来页面没有维护,所以我无法保证。
但是我在自己之前更改了这些设置(很抱歉我找不到我使用的确切教程)。
答案 1 :(得分:0)
这是因为在Firefox中实现了NTLM。
当您使用集成身份验证连接到站点时,服务器首先响应401和身份验证标头,以识别它支持的auth方法。您的浏览器可以通过多种方式对此做出反应。使用集成的auth,实际上有两种方法以略微不同的方式执行相同的操作。
IE使用Kerberos,因为它是微软。这种方法仅使用1次往返。您的浏览器会使用令牌响应上面遇到的挑战。这个令牌是服务器需要解决的所有问题,让你进入。
在Firefox中,他们使用较旧但更好记录的NTLM。 Firefox要求服务器提出服务器响应的挑战。 Firefox然后需要您的用户名和&密码来确认这个callenge,唯一的方法就是询问用户。
然后,它会根据您的用户名和密码使用加密值来应对挑战。密码。如果这符合服务器所期望的挑战,那么您将获得身份验证。
我猜Chrome使用类似于IE的方法,因此无需提示您。最重要的是,你没有做错任何事情。这只是它的工作方式。如果你想了解更多信息,我建议你阅读挑战/回复密码。
西蒙