网站权限进行基本身份验证WebService OR OWA
WebService
IIS设置
- 打开 IIS MMC 控制台。
Start->Run "inetmgr"
- 在左边的窗格中,展开目录树查找虚拟目录。
- 在右边的窗格中,右击“Secureservice.asmx”并选择“属性”。
- 选择“文件安全性”选项卡。在“匿名访问和验证控件”下,单击“编辑”。
- 禁用匿名访问。
- 禁用集成 Windows 身份验证。
- 启用基本身份验证。
- 单击“确定”保存这些设置并退出 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