微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net – 在未经授权的请求后禁止NTLM对话框

在最近的一个sharepoint项目中,我实现了一个身份验证webpart,它应该取代NTLM身份验证对话框.只要用户提供有效凭据,它就可以正常工作.每当用户提供无效凭据时,Internet Explorer中都会弹出NTLM对话框.

我通过XmlHttpRequest进行身份验证的Javascript代码如下所示:

function Login() {
   var request = GetRequest(); // retrieves XmlHttpRequest
   request.onreadystatechange = function() {
      if (this.status == 401) {     // unauthorized request -> invalid credentials
         // do something to suppress NTLM dialog Box...
         // already tried location.reload(); and window.location = <url to authentication form>;
      }
   }
   request.open("GET","http://myServer",false,"domain\\username","password");
   request.send(null);
}

我不希望在用户提供无效凭据时显示NTLM对话框.相反,应该执行身份验证表单中的登录按钮的回发.换句话说,浏览器不应该发现我的未经授权的请求.

有没有办法通过Javascript这样做?

解决方法

Mark评论是正确的; NTLM身份验证提示由401响应代码触发,并且NTLM的存在是WWW-Authenticate头中提供的第一个机制(参考号: The NTLM Authentication Protocol).

我不确定我是否正确理解了问题描述,但我认为您正在尝试为SharePoint包装NTLM身份验证,这意味着您无法控制服务器端身份验证协议,对吗?如果您无法操纵服务器端以避免在失败的凭据上发送401响应,那么您将无法避免此问题,因为它是(客户端)规范的一部分:

The XMLHttpRequest Object

If the UA supports HTTP Authentication [RFC2617] it SHOULD consider requests
originating from this object to be part of the protection space that includes the
accessed URIs and send Authorization headers and handle 401 Unauthorised requests
appropriately. if authentication fails,UAs should prompt the users for credentials.

因此,如果在XMLHttpRequest中收到任何401响应,则规范实际上要求浏览器相应地提示用户,就像用户直接访问了URL一样.据我所知,据我所知,真正避免这种情况的唯一方法就是让你控制服务器端并避免401 Unauthorized响应.

最后一个想法是,您可以使用代理来解决这个问题,这是另一个Web服务器上的单独服务器端脚本.该脚本然后接受用户并传递参数并检查身份验证,以便用户的浏览器不是正在发出原始HTTP请求的内容,因此没有收到导致提示的401响应.如果以这种方式执行此操作,您可以从“代理”脚本中找到它是否失败,如果是,则再次提示用户,直到成功为止.在成功的身份验证事件中,您可以像现在一样简单地获取HTTP请求,因为如果正确指定了凭据,一切都可以正常工作.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WPF...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这...
Some samples are below for ASP.Net web form controls:(from http://www.visualize.uk.com/resources/asp
问题描述: 对于未定义为 System.String 的列,唯一有效的值是(引发异常)。 For columns not defined as System.String, the only vali
最近用到了CalendarExtender,结果不知道为什么发生了错位,如图在Google和百度上找了很久,中文的文章里面似乎只提到了如何本地化(就是显示中文的月份)以及怎么解决被下拉框挡住的问题,谈
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence changed a lot since 1.1. Here is the order: App
静态声明: &#39; Style=&quot;position: relative&quot; AppendDataBoundItems=&quot;True&quot;&gt; (无 或 空 或
以下内容是从网络上搜集资料,然后整理而来的。不当之处,请不吝指教。(The following were from network, and edited by myself. Thanks in a
Imports System Imports System.Reflection Namespace DotNetNuke &#39;*********************************
Ok so you have all seen them: “8 million tools for web development”, “5 gagillion tools that if you
以下内容来源于: http://blog.csdn.net/cuike519/archive/2005/09/27/490316.aspx 问:为什么Session在有些机器上偶尔会丢失? 答:可能和
以下文章提到可以用“http://localhost/MyWebApp/WebAdmin.axd”管理站点: ---------------------------------------------
Visual Studio 2005 IDE相关的11个提高开发效率的技巧 英文原创来源于: http://www.chinhdo.com/chinh/blog/20070920/top-11-vis
C#日期格式化 from: http://51xingfu.blog.51cto.com/219185/46222 日期转化一 为了达到不同的显示效果有时,我们需要对时间进行转化,默认格式为:2007
from: http://www.nikhilk.net/UpdateControls.aspx Two controls that go along with the UpdatePanel and
Open the report in the Designer. In the ToolBox, select/expand the &quot;Report Items&quot; section.
from: http://drupal.org/node/75844 Do this: find which TinyMCE theme you are using. For the sake of
asp.net中给用户控件添加自定义事件 用户控件中定义好代理和事件: public delegate void ItemSavedDelegate(object sender, EventArgs
在Windows版本的Safari中浏览以下的页面。 http://www.asp.net/AJAX/Control-Toolkit/Live/Calendar/Calendar.aspx Calen
http://aspnet.4guysfromrolla.com/articles/021506-1.aspx By Scott Mitchell Introduction When creating