如何使用Windows身份验证了解并消除在MVC站点上显示的登录提示

时间:2018-01-17 09:56:24

标签: asp.net asp.net-mvc authentication windows-authentication

我有一个使用Windows身份验证的ASP.NET / MVC网站。

在IIS端,它设置为仅允许Windows身份验证。

enter image description here

web.config端配置为仅允许Windows身份验证:

<authentication mode="Windows" />
<authorization>
  <allow verbs="OPTIONS" users="*" />
  <deny users="?" />
</authorization>
<identity impersonate="true" />

问题在于有时候(取决于用户[这很奇怪,但可能只是随机],在1到50%的时间内),而不是按预期加载页面,浏览器(Chrome和IE的行为)相同的)将显示登录提示,而不是以无缝方式记录用户。

我无法确定以任何方式强行推送它,如果用户不断刷新同一页面,在同一浏览器中,它将最终工作(如果用户获得了登录提示第一个地方),或显示提示。

编辑: 我在IIS中激活了Failed Request Tracking。我可以看到所有查询都失败,错误代码为401.2,这是预期的,因为禁用了匿名身份验证。 第一个响应在其标题中包含已接受的身份验证模式:

WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM

对于大多数请求,下一个请求用于验证用户身份,一切正常。

当身份验证失败并显示登录提示时,下一个请求是401.1,并显示错误消息:

Indicates a particular Security ID may not be assigned as the label of an object. (0x80070513)

我不知道造成这种行为的原因,更不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

可能是重复的SPN问题。如果是,我相信您的应用程序在NTLM下运行而不是协商(kerberos)。

你可以在这里测试几件事。

从客户端捕获fiddler跟踪。如果身份验证令牌以TIRM ...开头,则为NTL​​M而不是kerberos。

另外,请分享以下信息。

  1. 这是负载均衡的环境吗?

  2. 您是否使用自定义域名或服务器名称访问该网站?

  3. 您的应用程序池的运行状态是什么。