ADFS3.0 Thread.CurrentPrincipal.Identity.Name 在请求之间返回为空字符串

ADFS3.0 Thread.CurrentPrincipal.Identity.Name returned as empty string between requests

我构建了一个自定义 ASP.Net MVC5 应用程序,部署在 DMZ(组织的外围网络)中,通过 ADFS 3.0(Active Directory 联合身份验证服务)对用户进行身份验证。该应用程序部署在启用了匿名身份验证的 IIS 中,并且由于它是 DMZ,因此服务器未加入域并且我没有可用的 Windows 身份验证。就 ADFS 和身份验证而言,它工作得很好,因为当从外部网络访问应用程序时,系统会提示用户 username/password,而当从网络内部访问时,系统会提示用户使用 SSO(单点登录)。

但是,问题是我有一个静态 class,它获取当前用户并根据数据库中的用户 table 对其进行验证。为了获取当前用户,我使用 Thread.CurrentPrincipal.Identity.Name。最初,它 return 给我一个用户名,但在导航应用程序的不同页面之间,它会翻转并开始 returning 一个空白字符串。翻转时没有特定的模式。对于同一个用户和会话,我突然开始收到一个空白字符串,在刷新几次页面后,它开始 return 返回用户名。

现在,我不确定这个问题是由于我调用 Thread.CurrentPrincipal.Identity.Name 的静态 class 和方法引起的,还是应用程序的配置有问题.我也试过 HttpContext.Current.User.Identity.Name,结果是一样的。使用静态 class 的原因是不在每个控制器中复制相同的代码。

我们将不胜感激任何帮助。谢谢!

所以问题出在我的 API 控制器上缺少 Authorize 属性,因此它们可以匿名访问。