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

本文关键字:等待 HTTP 情况下 BASIC 验证 默认 | 更新日期: 2023-09-27 18:05:03

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

我的问题是,现在每个后续请求服务都发出两个请求-一个没有授权(接收401),然后浏览器立即在报头中响应正确的授权。

是否有一种方法可以强制浏览器(可能通过一个特殊的标头)提供凭据,而不必每次都由web服务显式地询问?

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

我认为强制浏览器抢占401是不可能的。当对您的服务发出请求时,服务响应HTTP 401并添加WWW-Authenticate Basic标头以及,我猜,一个领域(您可以定义)。

有必要看一看基本身份验证的RFC,它详细说明了基本身份验证标准应该如何实现。http://www.ietf.org/rfc/rfc2617.txt

你也可以考虑实现你自己的HTTP模块,这应该给你的应用程序更大的灵活性,以及如何处理基本的身份验证。这允许您为身份验证和结束请求事件注册事件处理程序,并更清楚地规定您的服务将如何处理基本身份验证。这方面的入门教程可以在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;
}