当前位置: 首页 > 面试题库 >

如何隐藏浏览器的身份验证对话框?

勾海超
2023-03-14
问题内容

我的Web应用程序有一个登录页面,该页面通过AJAX调用提交身份验证凭据。如果用户输入正确的用户名和密码,则一切正常,但如果不正确,则会发生以下情况:

  1. Web服务器确定尽管请求中包含格式正确的Authorization标头,但标头中的凭据未成功进行身份验证。
  2. Web服务器返回401状态代码,并包含一个或多个列出受支持的身份验证类型的WWW-Authenticate标头。
  3. 浏览器检测到对我对XMLHttpRequest对象的调用的响应是401,并且该响应包含WWW-Authenticate标头。然后,它会弹出一个身份验证对话框,再次询问用户名和密码。

直到步骤3为止,一切都很好。我不想弹出对话框,我想处理AJAX回调函数中的401响应。(例如,通过在登录页面上显示错误消息。)当然,我希望用户重新输入用户名和密码,但是我希望他们看到我友好的,令人放心的登录表单,而不是浏览器的丑陋默认设置身份验证对话框。

顺便说一句,我无法控制服务器,因此让它返回自定义状态代码(即401以外的其他内容)不是一种选择。

有什么办法可以禁止身份验证对话框?特别是,我可以在Firefox 2或更高版本中取消“需要身份验证”对话框吗?有什么方法可以抑制IE
6及更高版本中的“连接到 [主机]” 对话框?

编辑
作者提供的其他信息(9月18日):
我应该补充一点,弹出的浏览器身份验证对话框的真正问题在于,它无法向用户提供足够的信息。

用户刚刚通过登录页面上的表单输入了用户名和密码,他认为自己已经正确输入了二者,并且单击了提交按钮或按Enter。他的期望是他将被带到下一页,或者被告知他输入的信息不正确,应重试。但是,相反,他看到一个意外的对话框。

对话是没有的,他只是一个事实确认 没有 输入用户名和密码。它没有明确指出存在问题,他应该重试。而是,对话框为用户提供了诸如“该站点说:’ [领域]
‘”之类的神秘信息。其中 [realm] 是只有程序员才能喜欢的简短领域名称。

Web浏览器设计者应注意:如果对话框本身只是更加用户友好的,则没人会问如何隐藏身份验证对话框。我填写登录表单的 全部
原因是我们的产品管理团队正确地认为浏览器的身份验证对话框很糟糕。


问题答案:

我认为这是不可能的-如果您使用浏览器的HTTP客户端实现,它将始终弹出该对话框。我想到两个技巧:

  1. 也许Flash对此的处理方式有所不同(我还没有尝试过),所以让Flash电影发出请求可能会有所帮助。

  2. 您可以在自己的服务器上为要访问的服务设置一个“代理”,并让它稍微修改身份验证标头,以使浏览器无法识别它们。



 类似资料:
  • 在本教程之后,我解决了这个问题。 如何阻止浏览器身份验证对话框?你能帮帮我吗?

  • 我目前正在使用定制的AuthenticationProvider实现将Key斗篷集成到一个相当复杂的spring boot应用程序环境中(因此我不使用Key斗篷AuthenticationProvider)。在我的例子中,我的目标是将OIDC身份验证协议与flow一起使用。 因此,当客户机导航到我的spring应用程序的登录页面时,他会被重定向到KeyClope登录页面。这已经奏效了。 在那里,一

  • 问题内容: 有谁知道在自动化过程中使用Selenium或任何其他工具来处理浏览器身份验证吗? 问题答案: 警报方法authenticateUsing() 使您可以跳过“ Http基本身份验证”框。 从Selenium 3.4开始,它仍处于测试阶段 现在,仅针对 InternetExplorerDriver

  • 问题内容: 我有一个非常简单的selenium-webdriver脚本。我想使用webdriver进行HTTP身份验证。 脚本: 问题: 抛出 org.openqa.selenium.NoAlertPresentException:不存在警报 题: Webdriver是否仅找到警报对话框作为警报? 在不使用AutoIt或http:// username:password @somesite的情况下

  • 我正在使用C#在selenium web驱动程序中为Chrome浏览器编写一个自动化脚本。我陷入了一个场景:多个选项卡在同一浏览器中打开,我需要导航到浏览器的第一个选项卡,并需要在“身份验证”对话框中重新输入登录凭据。 授权窗口截图如下: 我无法导航到第一个选项卡,也无法传递用户名 执行上述代码后,将出现以下错误: WebDriver等待有一些无效的参数。参数2:不能从int转换为System.时

  • 我们试图在本地模式下使用BrowserStack在内部网络上点击AUT。我已经对其进行了配置,以便获得远程浏览器会话,但当我试图通过Chrome将其定向到我们的应用程序(或防火墙内的任何)URL时,浏览器会弹出一个对话框,抱怨连接不是私有的,并要求输入用户名和密码。这不是一个正常的弹出窗口,我们无法使用Selenium自动执行,因此它会阻止我们死亡。 通过桌面浏览器会话访问时,系统知道我是谁,并以