当前位置:编程学习 > C#/ASP.NET >>

(求助)用代码模拟登陆IIS Windows Authentication认证的网站

功能描述
1. 做一个网站A,是通过IIS进行用户认证的;
a) A网站包含一个登陆界面能进行验证用户和密码;
b) A网站包含一个主页面,当用户密码输入正确进入此界面,主页面只需先生登陆成功信息即可;
2. 再做一个网站B,只有一个页面,页面上只有一个按钮,点击此按钮能直接打开A网站的主界面,不用输入A网站的用户和密码,也就是你需要在按钮的事件中用代码模拟登陆A网站,然后打开A网站的主界面。

开发环境
以下是建议开发环境,因为我们项目是这个环境,当然你可以按照你的开发环境进行,但必须是微软的开发环境
Visual Studio 2010
Framework 3.5
C#语言
运行环境
以下是建议运行环境,因为我们项目是这个环境,当然你可以按照你的运行环境进行,但必须是微软的运行环境

Windows 2008 Server 64bit
IIS 7.0
--------------------编程问答-------------------- 为嘛没人呢.......在线等...... --------------------编程问答-------------------- 除 --------------------编程问答-------------------- Q:1445232290 --------------------编程问答--------------------
<HTML>
<HEAD>
<TITLE>模拟登陆</TITLE>
</HEAD>
<BODY>

<script type="text/javascript">
var xmlHttp;

 

function createXMLHttpRequest(){

if(window.ActiveXObject){

xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");

}

else if (window.XMLHttpRequest){

xmlHttp=new XMLHttpRequest();

}

}

 

function startRequest(){
if(userid.value=="")
{
    alert("请输入用户名!");
    userid.focus();   
}
else if(password.value=="")
{
    alert("请输入密码!");
    password.focus(); 
}
else
{

    createXMLHttpRequest();
    
    xmlHttp.onreadystatechange=handleStateChange;
    
    xmlHttp.open("GET","http://yx-pc/MySite/Person.aspx",true,userid.value,password.value);
    
    xmlHttp.send(null);
}

}

 

function handleStateChange(){

if(xmlHttp.readyState == 4){


    if(xmlHttp.status == 200) {

        window.location="http://yx-pc/MySite/Person.aspx";

    }
    else
    {
        alert("您的用户名或者密码不正确,请联系管理员!");
    }

}


}
 
</script>


  <label>userid
  <input type="text" name="userid">
  </label>
  <p>
    <label>password
    <input type="password" name="password">
    </label>
  </p>
  <p>
    <label>
    <input type="submit" name="Submit" value="提交" onClick="javascript:startRequest();">
    </label>
  </p>

</BODY>
</HTML>
--------------------编程问答--------------------
引用 1 楼 cherry260706802 的回复:
为嘛没人呢.......在线等......
............... --------------------编程问答--------------------
引用 4 楼 yeness 的回复:
C# code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394……
谢谢yeness,不过这个对我们不可行呢。 --------------------编程问答-------------------- [b]
引用 4 楼 yeness 的回复:
C# code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394……
这个是针对于那个自己开发的登录页面的,而非基于IIS的Windows认证 --------------------编程问答--------------------
不用输入A网站的用户和密码,也就是你需要在按钮的事件中用代码模拟登陆A网站,然后打开A网站的主界面。
-----------------------------------------------------------------
何解?Oauth协议登陆? --------------------编程问答--------------------
引用 8 楼 fengyarongaa 的回复:
不用输入A网站的用户和密码,也就是你需要在按钮的事件中用代码模拟登陆A网站,然后打开A网站的主界面。
-----------------------------------------------------------------
何解?Oauth协议登陆?
不是 网站基于Windows 认证,弹出的登录框,在查看网页源码的时候,会发现是空的,不会记录这个登录框的任何信息。
--------------------编程问答-------------------- 自己顶一下吧 --------------------编程问答-------------------- 求解 --------------------编程问答-------------------- 在东西是System.Web.Security空间下的FormsAuthentication

具体的东西俺们不多说,自己看msdn,他比俺们说的清楚 --------------------编程问答--------------------
引用 12 楼 wanghui0380 的回复:
在东西是System.Web.Security空间下的FormsAuthentication

具体的东西俺们不多说,自己看msdn,他比俺们说的清楚
麻烦说清楚点了。 --------------------编程问答-------------------- 在线等求解 --------------------编程问答-------------------- 这个估计在页面里面做不了吧。 --------------------编程问答--------------------
引用 15 楼 findcaiyzh 的回复:
这个估计在页面里面做不了吧。

请问有什么方法吗?谢谢您赐教,加qq吧1445232290 --------------------编程问答-------------------- 这个是什么功能这么重要?甚至花钱也要解决?
不能变通其他方法吗 --------------------编程问答--------------------
引用 17 楼 jshi123 的回复:
这个是什么功能这么重要?甚至花钱也要解决?
不能变通其他方法吗
能帮帮忙不...支个招呗。。。。。 --------------------编程问答-------------------- 可以把B做成代理服务器,前提是B和A要在同一域中,B有该域的访问账号。 --------------------编程问答--------------------
引用 19 楼 jshi123 的回复:
可以把B做成代理服务器,前提是B和A要在同一域中,B有该域的访问账号。
能麻烦说详细点吗?? --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 原理是很简单的,可以用下面这段示意代码说明:

// 在服务器B上注册一个HttpHandler,处理所有页面请求
public class ProxyServer : IHttpHandler
{
//当收到客户端请求后,进行如下处理:
public void ProcessRequest(HttpContext context)
{
// 把访问改成指向ServerA的访问地址
String url = "http://ServerA" + context.Request.Path;

// 访问ServerA上的该页面,并带上ServerB的访问凭据
var wc = new WebClient();
wc.Credentials = CredentialCache.DefaultCredentials;
var response = wc.DownloadString(url);

// 得到结果后原样传回给客户端
context.Response.Write(response);
}
}

当然上面的代码只是示意性的,实际还要考虑Get/Post等不同请求方式、支持不同的协议、cookie、缓存、代理服务器本身的管理等。好在代理服务器很多,有开源免费的也有商用的,可以根据你的需求选择。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,