相关疑难解决方法(0)

使用jQuery和Ajax的基本身份验证

我试图通过浏览器创建基本身份验证,但我无法真正实现.

如果此脚本不在此处,则浏览器身份验证将接管,但我想告诉浏览器用户即将进行身份验证.

地址应该是这样的:

http://username:password@server.in.local/
Run Code Online (Sandbox Code Playgroud)

我有一个表格:

<form name="cookieform" id="login" method="post">
      <input type="text" name="username" id="username" class="text"/>
      <input type="password" name="password" id="password" class="text"/>
      <input type="submit" name="sub" value="Submit" class="page"/>
</form>
Run Code Online (Sandbox Code Playgroud)

还有一个脚本:

var username = $("input#username").val();
var password = $("input#password").val();

function make_base_auth(user, password) {
  var tok = user + ':' + password;
  var hash = Base64.encode(tok);
  return "Basic " + hash;
}
$.ajax
  ({
    type: "GET",
    url: "index1.php",
    dataType: 'json',
    async: false,
    data: '{"username": "' + username + '", "password" : "' + password + '"}', …
Run Code Online (Sandbox Code Playgroud)

javascript authentication ajax jquery

403
推荐指数
10
解决办法
65万
查看次数

如何禁止浏览器的身份验证对话框?

我的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日):
我应该补充说,浏览器的身份验证对话框弹出的真正问题是它给用户提供的信息不足.

用户刚刚通过登录页面上的表单输入了用户名和密码,他认为他已经正确输入了这些用户名和密码,并且他点击了提交按钮或按回车键.他的期望是,他将被带到下一页,或者可能被告知他输入的信息不正确,应该再试一次.但是,他会出现一个意外的对话框.

对话是没有的,他只是一个事实确认没有输入用户名和密码.它没有明确说明存在问题,他应该再试一次.相反,该对话框向用户显示诸如"网站说:' [领域] '之类的神秘信息." 凡[境界]是,只有一个程序员可以爱很短的领域名称.

Web broswer设计师注意到:如果对话框本身更加用户友好,没有人会问如何抑制身份验证对话框.我正在登录表单的全部原因是我们的产品管理团队正确地认为浏览器的身份验证对话框太糟糕了.

javascript ajax http-authentication

79
推荐指数
4
解决办法
5万
查看次数

检查 Windows 身份验证是否可用于 JavaScript

有没有办法检查 Windows 身份验证(协商、Kerberos、NTLM...)在浏览器中是否可用(使用 JavaScript 或其他方法),如果不可用,浏览器不会提示输入用户名和密码?

背景

我们正在开发 Angular2 SPA 企业应用程序,并且希望在可用时使用 Windows 身份验证进行 SSO(用户从加入域的计算机访问应用程序),并在不可用时优雅地故障转移到基于表单的身份验证(从 Internet 或非访问)加入域的计算机)。

设置

在服务器端拥有受 Windows 身份验证保护的资源(即 REST 方法)。当您使用 JavaScript 调用此 REST 方法时,将会发生以下两种情况之一:

  1. 如果 Windows 身份验证可用,将调用方法并且您将收到 200 OK 响应
  2. 如果 Windows 身份验证不可用,将返回 401 Unathorized,并将 WWW-Authenticate 标头设置为 Negotiate,这将导致浏览器(至少是 IE,未在其他浏览器中测试,但无论使用什么浏览器都需要能够检测到这一点)显示登录迅速的

问题

显示登录提示是不受欢迎的,我们希望优雅地退回到基于表单的登录。

一些解决方案建议从响应中删除 WWW-Authenticate 标头,但这将阻止 Windows 身份验证工作,因为此步骤是 broser-server 协商身份验证协议的一部分。如果删除,浏览器将永远不会发送 NTLM 或 Kerberos 令牌。

我们控制前端和后端,因此可以修改任一后端以使其正常工作。此外,没有 CORS,一切都是来自单个域的服务器。

任何能够从客户端检测 Windows 身份验证是否可用的方法对我们来说就足够了。到目前为止我发现的是这个,但它仅适用于 IE,并且需要启用 ActiveX。 这个问题有些相关,但也没有解决方案,而且已经很老了。

javascript authentication windows-authentication single-sign-on angular

5
推荐指数
1
解决办法
2620
查看次数