集成Windows身份验证:阻止访客用户

时间:2016-03-03 21:58:12

标签: java tomcat authentication kerberos iwa

我有Tomcat应用程序,我想添加对集成Windows身份验证(IWA)的支持 我想要以下行为:

  1. 如果用户是域认证用户 - 我想从请求中获取用户名(IWA本身)
  2. 如果用户不是域认证用户 - 我只想显示我的自定义页面,其中包含要登录的表单并手动对其进行身份验证。
  3. 因此,我的应用程序具有以下工作流程:

    1. 用户加载静态AngularJS页面
    2. 此页面对URL进行AJAX请求,例如/ login / check_iwa
    3. / login / check_iwa的服务器端发送401 WWW-Authenticate:Negotiate
    4. 如果是用户ID域用户 - 那么浏览器将使用用户的凭据重新发送请求,如果没有 - 没有任何反应,JS得到401并且认为用户是来宾。
    5. 我在第4步遇到问题。IE和Chrome始终显示访客用户的登录提示(使用FF,没有登录提示)。 有没有办法避免登录提示?我有自己漂亮的登录表单,我不想要访客用户的本机登录提示。 看来,我只需要kerberos身份验证,但IE和Chrome使用NTLM身份验证和登录提示。

      我是否需要发送401 WWW-Authenticate:Kerberos而不是Negotiate?

1 个答案:

答案 0 :(得分:1)

IE中的弹出式对话框是硬编码的,你不会把它拿走。它正在查询传递给SSPI的备用凭据。切换到Kerberos而不是Negotaite将不会给你任何东西,因为没有浏览器(IE,Chrome,FF)直接支持Kerberos但仅通过SPNEGO。你运气不好。如果SPNEGO失败,您最好使用Basic,但最后,在企业环境中失败的Kerberos只会意味着您的网络设置有问题并且需要修复。

编辑:由于您要为Intranet和Internet用户提供服务,因此您需要筛选身份验证器。如果您碰巧在Tomcat端使用Authenticator,您可以轻松编写SiftingAuthenticator,根据IP地址的范围决定简洁的身份验证器最佳。使用CombinedRealm作为模板。