通过asp.net打开基本身份验证的网站

时间:2012-01-21 07:36:55

标签: asp.net

我想在点击asp.net网页的按钮上打开一个网站。该网站具有开放的基本身份验证。我正在使用以下代码,但它不是打开网站所需的代码。

    CredentialCache credentialCache = new CredentialCache();
    NetworkCredential credentials = new NetworkCredential("uid", "pwd", "domain");
    credentialCache.Add(new Uri("https://www.abc.com"), "Basic", credentials);
    var request = (HttpWebRequest)WebRequest.Create("https://www.abc.com");
    request.Credentials = credentialCache;

    HttpWebResponse res1 = (HttpWebResponse)request.GetResponse();
    using (HttpWebResponse res = (HttpWebResponse)request.GetResponse())
    {
        string ss = res.ResponseUri.ToString();
        StreamReader sr = new StreamReader(res.GetResponseStream());
        Response.Write (sr.ReadToEnd());

    }

Response.Write在我的页面上写下所请求页面的html,但我需要重定向到该页面才能访问该网站。

1 个答案:

答案 0 :(得分:0)

经过长时间的搜索和R& D最后我得到了这个问题的解决方案。我们需要添加COM组件Microsoft Internet Controls的引用,即使用SHDocVw;

当我们尝试打开任何需要基本身份验证的网站时,服务器会响应“HTTP / 1.1 401 Unauthorized \ r \ n”并要求客户端凭据并在任何浏览器收到此消息时将标头“www_authenticate”发送给客户端然后它打开弹出框以插入客户端凭据,我们将客户端凭据传递给服务器。然后服务器允许访问该应用程序。

如果我们将第一个请求的客户端凭据传递给服务器,那么它允许访问应用程序而不需要客户端凭据。

我已使用以下代码传递了客户端凭据。

InternetExplorer IEControl = new InternetExplorer(); 
        IWebBrowserApp webBrowserCtl = (IWebBrowserApp)IEControl; 
        string strUserName = "UserName"; 
        string strPassword = "Password"; 
        string strAuthenticationHeader = "Authorization: Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(strUserName + ":" + strPassword)) + "\r\n"; 
        webBrowserCtl.Visible = true; 
        webBrowserCtl.Navigate("http://www.abc.com/Home.aspx", null, null, null, strAuthenticationHeader); 

谢谢

Rahul Pratap Singh