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

我有一个Web服务,要求BASIC身份validation标头出现在请求中,否则服务将返回HTTP 401(未经授权)。 这样做 – 当挑战回来时,浏览器(在这种情况下,Chrome)弹出并要求提供凭据。 然后保存它们以备将来请求。

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

有没有办法强制浏览器(可能通过一个特殊的标题)提供凭据,而不必每次都被Web服务明确询问?

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

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

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

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

AuthenticationSection config = (AuthenticationSection)WebConfigurationManager.GetSection("system.web/authentication"); if(config.Mode == AuthenticationMode.Forms) { module.Authenticate += OnEnter; context.EndRequest += OnLeave; }