默认情况下发送BASIC auth,而不是等待HTTP 401

时间:2013-03-20 04:05:14

标签: c# asp.net http basic-authentication http-status-code-401

我有一个Web服务,要求BASIC身份验证标头出现在请求中,否则服务将返回HTTP 401(未经授权)。这样做 - 当挑战回来时,浏览器(在本例中为Chrome)会弹出并请求凭据。然后将它们保存以备将来使用。

我的问题是,现在对服务的每个后续请求都有两个请求 - 一个没有auth(接收401),然后浏览器立即在标题中回复正确的auth。

是否有办法强制浏览器(可能通过特殊标头)提供凭据而无需每次都由Web服务明确询问?

1 个答案:

答案 0 :(得分:3)

我不相信有可能强制浏览器抢占401.当你的服务请求发出时,服务用HTTP 401响应并添加WWW-Authenticate Basic标头,我猜,领域(您可以定义)。

值得一看RFC的基本身份验证,详细介绍了如何实现基本身份验证标准。 http://www.ietf.org/rfc/rfc2617.txt

您还可以考虑实现自己的HTTP模块,它可以为您的应用程序提供更大的灵活性,以及​​如何处理基本身份验证。这允许您为Authenticate和End Request事件注册事件处理程序,并更清楚地说明您的服务将如何处理基本身份验证。有关这方面的入门知识,请访问asp.net网站。 http://www.asp.net/web-api/overview/security/basic-authentication

如果您的服务根据您的应用程序身份验证使用不同的身份验证(例如,当应用程序配置为表单身份验证时,服务将仅使用基本身份验证),而不是使用HTTP模块,则允许您有条件地使用基本身份验证。我通常在这种情况下注册我的处理程序,如下所示:

AuthenticationSection config = (AuthenticationSection)WebConfigurationManager.GetSection("system.web/authentication");

if(config.Mode == AuthenticationMode.Forms)
{
    module.Authenticate += OnEnter;
    context.EndRequest += OnLeave;
}