如何识别,从URL验证什么类型

本文关键字:URL 验证 什么 类型 何识别 识别 | 更新日期: 2023-09-27 18:18:15

我正在编写一个C#应用程序,从URL获取一些信息。

Url是在本地内部网环境中托管在IIS中的Web应用程序的Url。

web应用程序是使用ASP开发的。净 (c#)

IIS中,这些配置为FormsWindows认证。

是否有一种方法来识别什么类型的身份验证是相应的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 ();
        }
    }

如何识别,从URL验证什么类型

通过url猜测是不准确的。但是您可以使用标题信息进行有根据的猜测。Windows和基本身份验证为您提供了足够的信息。因此,请先检查这些

下面是确定认证类型的报头信息。先检查basic和windows。如果不是basic或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

不,不基于URL,除非您特别在URL中添加一些内容来表示它。但如果你这么做了,你会知道的。

既然你拥有这些网站,你应该提前知道他们使用什么类型的身份验证,而不需要看URL,对吗?或者您可以通过编程方式连接到服务器并检查IIS设置。您还可以通过检查来自服务器的响应中的HTTP头来检测身份验证类型,但这超出了您的问题范围。

如果你的web应用程序是正确编写的,那么当一个受保护的资源被请求时,它应该响应一个401状态和一个包含身份验证挑战的WWW-Authentication头。解码身份验证挑战将显示支持的身份验证类型(基本、摘要、NTLM等)。了解更多信息,请参见理解HTTP身份验证。

WebRequest支持此挑战,并使用为该挑战配置的Credential来验证自己。

如果您的应用程序使用表单和cookie进行身份验证,那么WebRequest将无法对自己进行身份验证。您必须添加支持,例如使用WebClient

参见如何使用WebClient登录网站?