【问题标题】:How to identify, what type of authentication from URL?如何识别,来自 URL 的身份验证类型是什么?
【发布时间】:2015-10-19 12:19:07
【问题描述】:

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

网址是 Web 应用程序,托管在我们本地 intranet 环境中的 IIS 中。

Web 应用程序是使用 ASP.NET (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 ();
        }
    }

Demo

【问题讨论】:

    标签: c# asp.net .net iis console-application


    【解决方案1】:

    通过 url 猜测是不准确的。但是您可以使用标题信息进行有根据的猜测。 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
    

    【讨论】:

      【解决方案2】:

      不,不是基于 URL,除非您专门在 URL 中添加一些内容来表明它。但你会知道如果你这样做了。

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

      【讨论】:

      • 感谢@mason,我认为HTTP response headers 会给我预期的结果。我已经更新了我的问题。能给我一些参考吗?
      • 你好 Mason,有人在 Spring Boot 的面试中问了我这个问题,作为职位描述中的要求。首先我说 HTTP 或 HTTPS,他不满意。所以,我说使用 URL,我们无法弄清楚,但我们可以在加载页面时在浏览器的开发人员工具中使用控制台。
      • @raja777m HTTP 或 HTTPS 与身份验证类型完全无关。控制台本身不太可能告诉您身份验证类型。但是您可以通过检查标头或 cookie 来弄清楚。我没有用过Spring Boot,但是每个框架都可能以某种方式存储身份验证信息,通过查看浏览器开发工具中的网络流量可能会看到。
      • 感谢 Mason,我对 Spring 安全性了解不多。感谢您的回答。
      【解决方案3】:

      如果您的 Web 应用程序编写正确,那么当请求受保护的资源时,它应该以 401 状态和包含身份验证质询的 WWW-Authentication 标头进行响应。解码身份验证质询将显示支持的身份验证类型(BasicDigest、NTLM 等)。在Understanding HTTP Authentication 阅读更多内容。

      WebRequest 支持此质询,并使用为该质询配置的 Credential 进行身份验证。

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

      How do I log into a site with WebClient?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        • 2016-04-22
        • 1970-01-01
        • 1970-01-01
        • 2011-04-13
        相关资源
        最近更新 更多