我已经构建了一个部署在DMZ(组织的外围网络)中的自定义ASP.Net MVC5应用程序,通过ADFS 3.0(Active Directory联合身份验证服务)对用户进行身份验证。该应用程序部署在IIS中,启用了匿名身份验证,因为它是DMZ,因此服务器未与域连接,并且我没有Windows身份验证可用。就ADFS和身份验证而言,它非常有效,因为当从外部网络访问应用程序时会提示用户/密码,并且当从网络内部访问时使用SSO(单点登录)。
然而,问题是我有一个静态类,它获取当前用户并根据数据库中的users表验证它。要获得当前用户,请使用Thread.CurrentPrincipal.Identity.Name
。最初,它确实返回了一个用户名,但在它之间浏览它翻转的应用程序的不同页面并开始返回一个空白字符串。翻转时没有特定的模式。对于同一个用户和会话,突然间我开始得到一个空白字符串,经过几次页面刷新后,它开始返回用户名。
现在,我不确定这个问题是否是由于我有一个静态类和方法,我正在调用Thread.CurrentPrincipal.Identity.Name
或者应用程序的配置有问题。我也试过了HttpContext.Current.User.Identity.Name
,结果是一样的。拥有静态类的原因不是在每个控制器中复制相同的代码。
任何帮助都将受到高度赞赏。谢谢!
答案 0 :(得分:0)
所以问题结果是我错过了我的API控制器上的Authorize属性,因为它们是匿名访问的。