2011-03-23 59 views
6

我有一个web应用程序,它也执行kerberos和基本身份验证。我不知道客户有什么能力。所以这两个认证机制都在401回复中发送。如何从Negotiate方法从协商方法回退到Basic只有当协商失败

答复标题包含,

WWW-Authenticate: Negotiate 
WWW-Authenticate: Basic realm="MyREALM" 

但是,我希望客户端回落到只有在谈判失败基本身份验证。

我想要的流量应该是这样的,

  1. 客户端请求
  2. 服务器与WWW验证响应:协商
  3. 用(无论是与错误的身份验证数据,或者与某些客户端重新请求标志指示它不能继续)
  4. 服务器再次响应WWW-Authenticate:Basic realm =“MYREALM”
  5. 客户端执行基本身份验证。

我该怎么做?我修改了服务器代码来执行此操作。但不在任何域中的浏览器(它应该执行基本身份验证)在步骤2后不响应。

+1

是的,你使用的是什么浏览器和服务器?浏览器必须知道在收到401 WWW-Authenticate:Negotiate时附加SPNEGO票证。如果浏览器不知道如何附加上述SPNEGO票据,它将通过显示服务返回的401页面来停止握手。 我已通过控制器重定向所有401响应并在用户会话中跟踪已将** 401 **发送给** WWW-Authenticate:Negotiate **的事实,从而实现登录回退。在这种情况下,我重定向到登录页面,否则我只是显示框标准401页面。 – diginoise 2014-08-22 13:09:28

回答

0

什么是您的浏览器?具体的RFC chapter 4.6要求浏览器必须使用提供的最强权威认证。我无法回想一下,如果浏览器无法获取证书,它应该做些什么。