默认发送 BASIC 身份验证,而不是等待 HTTP 401

2024-01-08

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

我的问题是,现在对服务的每个后续请求都会发出两个请求 - 一个没有身份验证(收到 401),然后浏览器立即在标头中回复正确的身份验证。

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


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

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

您还可以考虑实现自己的 HTTP 模块,这将为您的应用程序以及处理基本身份验证的方式提供更大的灵活性。这允许您为身份验证和结束请求事件注册事件处理程序,并更清晰地指示您的服务将如何处理基本身份验证。 asp.net 网站上提供了这方面的入门知识。http://www.asp.net/web-api/overview/security/basic-authentication 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

默认发送 BASIC 身份验证,而不是等待 HTTP 401 的相关文章

随机推荐