网站权限进行基本身份验证WebService OR OWA

 

WebService
IIS设置

  1. 打开 IIS MMC 控制台。

     

    Start->Run "inetmgr"
        
  2. 在左边的窗格中,展开目录树查找虚拟目录。
  3. 在右边的窗格中,右击“Secureservice.asmx”并选择“属性”。
  4. 选择“文件安全性”选项卡。在“匿名访问和验证控件”下,单击“编辑”。

    • 禁用匿名访问。
    • 禁用集成 Windows 身份验证。
    • 启用基本身份验证。

     

  5. 单击“确定”保存这些设置并退出 MMC 控制台。


调用代码

代码示例:

 DormMng.DormMng dr = new DormMng.DormMng();//WebService引用
//设置用户与密码
System.Net.NetworkCredential mycredential= new System.Net.NetworkCredential();
mycredential.UserName = "myname";
mycredential.Password = "mypassword";
mycredential.Domain = "mydomain";
dr.Credentials = mycredential ;
//一般的操作
dr.DeleteDorm("fff");

或者可以使用
  DormMng.DormMng dr = new DormMng.DormMng();
        dr.Credentials = new System.Net.NetworkCredential("administrator", "XXXXX");
        dr.DeleteDorm("fff");


在代码中没有使用dr.Credentials = new System.Net.NetworkCredential("administrator", "XXXXX");
时会发生出错  请求因 HTTP 状态 401 失败: Access Denied  这是因为没有通过登陆验证。


 

OWA     因为本人机上是用XP系统,不能安装OWA,这没经过OWA的测试
还有一种,就是自定义一个登陆框,使用这一登陆进行设有WINDOWS验证的网站中

用JS可以这样写

<script language="javascript" type="text/javascript">
<!--
function logon(sUrl,sUid,sPwd){
  var sender = new ActiveXObject("Microsoft.XMLHTTP")
  sender.open("GET",sUrl,false,sUid,sPwd)
  sender.send()

  switch(sender.status){
    case 200:
      window.location.href = sUrl    
      break

    case 401:
      alert("用户无效或密码错误...")
      break

    case 404:
      alert("该站点地址不正确")
      break
    default:
      alert("发生不明错误...")
  }
 
 
}


//-->
</script>
uid:
<input type="text" name="uid" id="Text1"/>
pwd
<input type="password" name="pwd" id="Text2"/>
<input type="button" onclick="logon('http://localhost/WebSite/DormMng.asmx',uid.value,pwd.value)" value="logon"/>


但一般我们把这写法改为在ASP。NET后台写时(注意:这方法一定要引用COM组件Interop.MSXML2.dll则COM的引用列表中的Microsoft.xml v3.0

 string Location = "http://localhost/WebSite/DormMng.asmx";
        XMLHTTP auth = new XMLHTTP();
        object d = new object();
        auth.open("GET", Location, false, "administrator", "XXXXXXX");
        auth.send("");
        switch (auth.status)
        {   //检测auth.send以后的状态,  
            case 200:   //状态为:200代表用户名密码正确,  
                //this.Response.(Location);

                //Label1.Text = "<script language=javascript> window.location.href='" + Location + "';</script>";
Response.write("<script language=javascript> window.location.href='" + Location + "';</script>");

              //window.location.href = Location;   //浏览器重转向至exchange   2000   server   OWA    
                break;
            case 401:   //状态为:401代表用户名密码不正确,身份验证错误  
                break;
         }
是用Response.write进行页面转换,但刚运行时问题就出现了,虽然通过了验证,但是还是会有那一个可恶的WINDOWS验证框出来。

 这是为什么呢??在生成页面后,查看一下源代码,我们会发现用JS提交的按钮是发BUTTON的类型,但用于CS提交的是以SUBMIT的类型,当我发觉这一点后就把JS按钮的类型改为SUBMIT,一试之下,结果就出来了,不能转向。好,那就是说发生提交后,登陆验证的信息就会失去,只有当不发生提交事件时,则只在客户端运行时才可以通过验证转向指定页面,那就是WINDOW的用户登陆框只是基于客户端上使用,不能发送到服务端。

还有一点,就是使用Microsoft.XMLHTTP是不能跨网域使用的,如果不同域使用会发生脚本出错(没有权限)提示。
处理到xmlRequest.open("get",exchangeURL,false,userName,password)时,会报JAVASCIPT错误,原因是没有权限。原来EXCHANGE用的是域模式,而在默认的IE设置中,通过域访问数据资源是禁止的。除了改设置,暂时没有好办法解决。
设为可信任站点即可 (网上找到,没有试过)http://www.cnblogs.com/fireball/archive/2005/04/14/137924.html

posted on 2008-01-20 15:54  笨雀  阅读(722)  评论(0编辑  收藏  举报