如何识别,来自URL的什么类型的认证?
How to identify, what type of authentication from URL?
我正在编写一个 C#
应用程序以从 URL 获取一些信息。
Url 属于 Web 应用程序,托管在我们本地 intranet 环境中的 IIS
中。
Web 应用程序是使用 ASP.NET (C#).
开发的
在 IIS
中,这些配置为 Forms 或 Windows 身份验证。
有没有办法确定相应的 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中添加一些东西来表明它。但是你会知道如果你这样做了。
既然你拥有这些网站,你应该提前知道他们使用什么类型的身份验证,而不需要查看 URL,对吧?或者您可以通过编程方式连接到服务器并检查 IIS 设置。您还可以通过检查服务器响应中的 HTTP headers 来检测身份验证类型,但这超出了您的问题范围。
如果您的 Web 应用程序编写正确,那么当请求受保护的资源时,它应该响应 401 status and a WWW-Authentication
header containing the authentication challenge. Decoding the authentication challenge will show the authentication types supported (Basic, Digest, NTLM etc). Read more at Understanding HTTP Authentication。
WebRequest
支持此质询并使用为该质询配置的 Credential
验证自己。
如果您的应用程序使用表单和 cookie 进行身份验证,则 WebRequest
将无法对自身进行身份验证。您将不得不添加支持,例如使用 WebClient
。
见How do I log into a site with WebClient?
url 的猜测不准确。但是您可以使用 header 信息进行有根据的猜测。 Windows 和基本身份验证为您提供了足够的信息。因此首先检查那些。
下面是header信息来判断认证类型。首先检查 basic 和 windows。如果不是基本的或 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
我正在编写一个 C#
应用程序以从 URL 获取一些信息。
Url 属于 Web 应用程序,托管在我们本地 intranet 环境中的 IIS
中。
Web 应用程序是使用 ASP.NET (C#).
开发的在 IIS
中,这些配置为 Forms 或 Windows 身份验证。
有没有办法确定相应的 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中添加一些东西来表明它。但是你会知道如果你这样做了。
既然你拥有这些网站,你应该提前知道他们使用什么类型的身份验证,而不需要查看 URL,对吧?或者您可以通过编程方式连接到服务器并检查 IIS 设置。您还可以通过检查服务器响应中的 HTTP headers 来检测身份验证类型,但这超出了您的问题范围。
如果您的 Web 应用程序编写正确,那么当请求受保护的资源时,它应该响应 401 status and a WWW-Authentication
header containing the authentication challenge. Decoding the authentication challenge will show the authentication types supported (Basic, Digest, NTLM etc). Read more at Understanding HTTP Authentication。
WebRequest
支持此质询并使用为该质询配置的 Credential
验证自己。
如果您的应用程序使用表单和 cookie 进行身份验证,则 WebRequest
将无法对自身进行身份验证。您将不得不添加支持,例如使用 WebClient
。
见How do I log into a site with WebClient?
url 的猜测不准确。但是您可以使用 header 信息进行有根据的猜测。 Windows 和基本身份验证为您提供了足够的信息。因此首先检查那些。
下面是header信息来判断认证类型。首先检查 basic 和 windows。如果不是基本的或 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