2015-10-19 112 views
1

我正在編寫一個C#應用程序來從URL獲取一些信息。如何識別URL的認證類型?

的URL的是在我們當地內聯網環境IIS託管Web應用程序

Web應用程序使用ASP.NET (C#)開發。

IIS這些配置爲形式視窗身份驗證。

有沒有一種方法來識別相應的Web應用程序的URL是什麼類型的身份驗證?

這就是我到目前爲止!

using System; 
    using System.IO; 
    using System.Net; 
    public class Program 
    { 
     public static void Main() 
     { 
       var url = "http://www.contoso.com/default.html"; 
       WebRequest request = WebRequest.Create(url); 
       HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

       //he i need to know what type of authentication the url 

       Console.WriteLine (response.StatusDescription); 

       Stream dataStream = response.GetResponseStream(); 

       StreamReader reader = new StreamReader (dataStream); 

       string responseFromServer = reader.ReadToEnd(); 

       reader.Close(); 
       dataStream.Close(); 
       response.Close(); 
     } 
    } 

Demo

回答

2

猜測的網址是不準確的。但是,您可以使用標題信息進行有根據的猜測。 Windows和基本認證爲您提供了足夠的信息。因此先檢查那些。

以下是確定認證類型的標頭信息。首先檢查基本和窗口。如果不是基本或窗口,並且存在重定向,則可以默認爲表單。如果沒有重定向,就沒有認證。

Windows身份驗證

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Negotiate 
WWW-Authenticate: NTLM 

基本身份驗證

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Basic realm="test.local" 

窗體身份驗證

HTTP/1.1 302 Found 
Location: /Account/Login?ReturnUrl=%2f 
1

不,不是基於URL,除非你特別添加的東西到URL以表明它。但是你會知道你是否這樣做過。

由於您擁有這些網站,因此您應該提前知道他們使用的是哪種類型的身份驗證,而無需查看網址,對不對?或者你可以編程連接到服務器並檢查IIS設置。您也可以通過檢查來自服務器的響應中的HTTP標頭來檢測認證類型,但這不在您問題的範圍之內。

+0

謝謝@mason,我覺得'HTTP響應headers'會給我預期的結果。我更新了我的問題。你能否給我提供一些參考? –

0

如果您的Web應用程序寫入正確,那麼當請求受保護的資源時,它應以包含身份驗證質詢的401狀態和WWW-Authentication標題進行響應。解碼認證挑戰將顯示支持的認證類型(Basic,Digest,NTLM等)。閱讀更多在Understanding HTTP Authentication

WebRequest支持此挑戰並使用爲該挑戰配置的Credential進行身份驗證。

如果您的應用程序使用表單和cookie進行身份驗證,那麼WebRequest將無法​​進行身份驗證。您將不得不添加支持,例如使用WebClient

How do I log into a site with WebClient?