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 属性,因此它们可以匿名访问。
我构建了一个自定义 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 属性,因此它们可以匿名访问。