IIS设置 禁用匿名, 采用摘要身份验证(AD为中心的身份验证),web服务器、客户端服务器都在域内,并且网站有Domain users 访问权限,且在DC上启用了“密码可逆策略”。
这个时候照理说,域用户一旦登录计算机,访问这个站点的时候不会在提示输入口令对话框。
但是现在的情况是提示“输入网络密码”,请问如何解决。
感觉服务器没有识别这个请求是Intranet类型的,而没有得到windows用户凭证

解决方案 »

  1.   

    有做过的帮帮忙啊,msdn翻了无数遍,也没能解决。
      

  2.   

    using System;
    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;
                }
            }
        }
    }
      

  3.   

    1. 在web.config中设置<authentication mode="Windows"/>
    2. 在IIS-默认的Web站点-虚拟目录-属性-目录安全性-编辑中选择 "集成Windows验证",注意"匿名访问"一定不要选
    3. 在asp.net中使用 User.Identity.Name 就可以得到域名和用户名.
      

  4.   

    首先,谢谢HDNGO
    这样不行,这个问题不是服务器端编码的问题。
    在客户端向服务器段发送请求的时候,由于没有通过验证请求被IIS服务器拦截所以根本无法执行服务器段代码,如果采用编程的方式来解决的话只能用客户端的ActiveX来解决。
    我觉得给予AD为验证中心的验证方式,不需要编程的方式来进行二次登录和验证,应该在用户登录到域内后,AD可以直接取到进程中的用户令牌来实现验证。
      

  5.   

    <authentication mode="Windows"/> 
    IIS设置中把勾都打上,然后代码跟踪,看看断点能不能到达,能到达再把勾一个一个去掉试试。
    www.datasonar.com
      

  6.   

    谢谢shangwg的回复,把IIS的匿名加上肯定是可以进入应用程序的,但是这样肯定是anonymous用户。
      

  7.   

    确实不是代码问题,而是网管的问题。
    好象和DNS服务有关。
    试试用本地IP访问网站。
      

  8.   

    谢谢,rtdb
    用Ip,域名或者是机器名访问都不行,都会弹出“输入网络密码”。
    而我在网上确实看到有人实现了我的需求。
      

  9.   

    遇到过这个问题的人,请帮帮忙吧,一直没能解决,不晓得是AD服务器的问题还是DNS的问题。我的AD服务器和dns是一台机器
      

  10.   

       关键是我为了避免一些外部原因,把本来分布式的系统,做了一个简单的模拟,很简单的webapp宿主在IIS6.0上,采用摘要身份认证,部署在域服务器(也是DNS服务器)上,然后在域服务器上访问这个WEBAPP,还是提示“输入网络密码”。已经快两周了,解决不了。
      

  11.   

    有没有弹框的截图看看。一般来说使用机器名访问的话IE就不会弹框。用IP或者完整的域名访问,那IE默认就是要弹框的,除非加入到受信站点中。
      

  12.   

    刚刚看了一下,你使用Digest方式那么IE肯定要弹框的,IE就是这么设计的。http://support.microsoft.com/kb/258063不想弹框的话一定要使用Windows集成验证。而且集成验证本身就比Digest更加安全。
      

  13.   

    To lextm:没找到CSDN上传图片的地方,就是一个"需要输入网络密码     该网站安全(...)需要你登录"。
    你确认摘要方式ie肯定要弹出对话框,可是基于AD为中心的身份认证,我看到网上有实现不出现对话框的,只不过没有具体操作步骤,还有MOSS,Exchange这些产品好像都实现了。
    如果采用windows集成身份验证,然后把服务器的地址添加到本地Intranet,并且取消摘要身份验证的选项,确实没有问题,用户登录到域计算机就可以直接访问站点。但是这样就需要每个用户都设置一下IE。
    还有你说的"一般来说使用机器名访问的话IE就不会弹框。",这个我这里只有域服务器本身访问站点的时候是这样,但是必须的采用windows集成身份验证方式,其实这正说明了,IE没有很好的区分开Intranet还是Internet。
      

  14.   

    集成验证同样可以通过AD实现。实际上集成验证和Digest方式很类似,而且更加安全。假如你同时开了集成验证和Digest,IE还会优先选择集成验证。MOSS,Exchange验证方式是可以定制的,而且有些公司使用的时候喜欢用Forms验证方式,那就是弹出一个登录的网页来做验证了,而不是用IE弹框的方式了。至于你最后一个问题,我觉得你不太可能让IE帮你自动做判断。对于一个IP地址或者一个完整的域名FQDN,IE根本没办法判断是不是内网(其实搞懂了原理,Firefox之类的浏览器一样做不到)。假如你认为内网一定使用private部分的IP地址,那么你就搞错了。很多大公司内部都是使用的public段的IP地址。
      

  15.   

    也就是说如果在不自行开发登录模块的前提下,即使所有的客户机和服务器全在域内,并且使用域帐户,也必须要客户端用户做点事情了(设置IE的本地Intranet)。
      

  16.   

    我也遇到这个问题,不想使用activex,所以目前增加了个登录页面
      

  17.   

    呵呵,ActiveX确实可以解决这个问题,添加登录模块也可以,谢谢。
    可这些不是我想要的解决方案,也许MS的AD做得真的不够好...
      

  18.   

    不理解为什么你对我上面的留言视而不见。使用Windows集成验证是十分困难的事情吗?
      

  19.   

    Sorry,lextm
    首先,谢谢你,我看见你的回复了。但是其实我想不需要客户端对IE做任何设置就实现登录。我明白你的意思,也许其实我的想法根本实现不了。
    这个帖子保留1个月,如果真的没有特别满意的回复,只好结贴。