IIS设置 禁用匿名, 采用摘要身份验证(AD为中心的身份验证),web服务器、客户端服务器都在域内,并且网站有Domain users 访问权限,且在DC上启用了“密码可逆策略”。
这个时候照理说,域用户一旦登录计算机,访问这个站点的时候不会在提示输入口令对话框。
但是现在的情况是提示“输入网络密码”,请问如何解决。
感觉服务器没有识别这个请求是Intranet类型的,而没有得到windows用户凭证
这个时候照理说,域用户一旦登录计算机,访问这个站点的时候不会在提示输入口令对话框。
但是现在的情况是提示“输入网络密码”,请问如何解决。
感觉服务器没有识别这个请求是Intranet类型的,而没有得到windows用户凭证
using System.DirectoryServices;namespace ConsoleApplication1
{
internal class Program
{
private static void Main(string[] args)
{
string name = "jim green"; // RDN format
string logonName = @"xxx\jgreen"; //pre windows 2000 format
Console.WriteLine(IsUserValid(name, "the-password"));
Console.WriteLine(IsUserValid(logonName, "the-password"));
Console.ReadLine();
} public static bool IsUserValid(string name, string pwd)
{
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://xxx.com", name.ToLower(), pwd,AuthenticationTypes.ServerBind); try
{
// Bind to the native object to force authentication
Object nativeObject = rootEntry.NativeObject;
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex);
return false;
}
}
}
}
2. 在IIS-默认的Web站点-虚拟目录-属性-目录安全性-编辑中选择 "集成Windows验证",注意"匿名访问"一定不要选
3. 在asp.net中使用 User.Identity.Name 就可以得到域名和用户名.
这样不行,这个问题不是服务器端编码的问题。
在客户端向服务器段发送请求的时候,由于没有通过验证请求被IIS服务器拦截所以根本无法执行服务器段代码,如果采用编程的方式来解决的话只能用客户端的ActiveX来解决。
我觉得给予AD为验证中心的验证方式,不需要编程的方式来进行二次登录和验证,应该在用户登录到域内后,AD可以直接取到进程中的用户令牌来实现验证。
IIS设置中把勾都打上,然后代码跟踪,看看断点能不能到达,能到达再把勾一个一个去掉试试。
www.datasonar.com
好象和DNS服务有关。
试试用本地IP访问网站。
用Ip,域名或者是机器名访问都不行,都会弹出“输入网络密码”。
而我在网上确实看到有人实现了我的需求。
你确认摘要方式ie肯定要弹出对话框,可是基于AD为中心的身份认证,我看到网上有实现不出现对话框的,只不过没有具体操作步骤,还有MOSS,Exchange这些产品好像都实现了。
如果采用windows集成身份验证,然后把服务器的地址添加到本地Intranet,并且取消摘要身份验证的选项,确实没有问题,用户登录到域计算机就可以直接访问站点。但是这样就需要每个用户都设置一下IE。
还有你说的"一般来说使用机器名访问的话IE就不会弹框。",这个我这里只有域服务器本身访问站点的时候是这样,但是必须的采用windows集成身份验证方式,其实这正说明了,IE没有很好的区分开Intranet还是Internet。
可这些不是我想要的解决方案,也许MS的AD做得真的不够好...
首先,谢谢你,我看见你的回复了。但是其实我想不需要客户端对IE做任何设置就实现登录。我明白你的意思,也许其实我的想法根本实现不了。
这个帖子保留1个月,如果真的没有特别满意的回复,只好结贴。