默认发送BASIC auth,而不是等待HTTP 401再发送

4
我有一个需要在请求中包含基本认证头的Web服务,否则服务将返回HTTP 401(未经授权)。这个方法可以使用 - 当挑战返回时,浏览器(在这种情况下为Chrome)弹出并要求提供凭据。然后将它们保存以便于将来的请求。
我的问题是每个后续请求现在都会发出两个请求 - 一次没有身份验证(收到401),然后浏览器立即回复正确的身份验证头。
有没有一种方法可以强制浏览器(也许通过特殊的头文件)在每次请求时无需被Web服务明确要求就提供凭据?
1个回答

3
我不相信能够强制浏览器先处理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;
}

+1;我已经自己处理了基本身份验证服务器端,并响应了头部,浏览器最终会解决它。我的问题在于浏览器,我不知道是否有一种标准的方法使其表现更好。 - theMayer
我相信你在第1段和第2段的观察是正确的(帖子的其余部分与我的情况无关)。这个问题似乎已经在Chrome的后续版本中得到解决,因为它现在会自动发送auth。 - theMayer
为什么这甚至成为标准呢? - Philip Bergström

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接