【问题标题】:Web API 2 RequestContext.Principal returning previous username with Windows AuthenticationWeb API 2 RequestContext.Principal 使用 Windows 身份验证返回以前的用户名
【发布时间】:2016-04-12 00:38:00
【问题描述】:

我有一个使用 Web API 2 (VB.Net) 构建的 API,在 IIS 7.5 上运行,它依赖于 Windows 身份验证并由 AngularJS 应用程序查询。一年左右一切都运行良好,但我们现在有一个用户,我们在几天前更改了他们的用户名,因为他们最近结婚了。

所有正常的 Windows 登录过程都使用新用户名,但 API 尝试使用的凭据始终引用旧用户名。

AngularJS:

$http.get($rootScope.urlAPI + 'access/', {      
  cache: false,
  withCredentials: true
}).success 
...

Web API 2:

<HttpGet>
<Route("api/access")>
<ResponseType(GetType(UserAccessDTO))>
<NoCachePolicy>
<Authorize> _
Function GetStaffAccessForApp() As UserAccessDTO
  Dim objUser As System.Security.Principal.WindowsPrincipal = RequestContext.Principal
  Dim strUsername As String = objUser.Identity.Name
  ' strUsername is somehow returning their old username
...

strUsername 以某种方式返回了他们的旧用户名

从浏览器直接查询 API 会返回与旧用户名相同的 JSON 结果,所以我不认为问题出在 AngularJS 应用程序上,而是在浏览器和 API 之间...

IE11 和谷歌浏览器都会出现这个问题,我尝试清除浏览器缓存、删除 cookie,并尝试在 IIS 中重新启动 API 的网站服务以重新加载 API。

我们只有 2 个域控制器,而且已经有几天了,所以它们肯定是同步的,我已经滚动浏览了她帐户的属性,但在那里找不到她的旧用户名的引用,所以我很茫然这是从哪里来的:(

【问题讨论】:

    标签: angularjs vb.net asp.net-web-api2 windows-authentication


    【解决方案1】:

    对于其他有类似问题的人,似乎只有在重新启动服务器后才能解决。我们进行了每月定期维护,包括逐步重启所有服务器。在重新启动域控制器、数据库服务器和 API 服务器之间的某个地方,它今天早上为用户解决了这个问题。

    有点令人失望,我们无法确定它的确切位置......但可能缓存在某个地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-28
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2012-09-29
      • 2014-01-28
      • 1970-01-01
      相关资源
      最近更新 更多