我使用Azure Active Directory(AAD)对登录我的ASP.Net MVC网站的用户进行身份验证。在主页中,我应该显示当前登录的用户信息,但它始终显示我的信息而不是登录用户。我有一个名为Common.cs的静态类,它有FirstName,LastName和Name作为静态字符串。
以下是我使用的代码:
static Common()
{
ClaimsIdentity myPrincipal = ClaimsPrincipal.Current.Identity as ClaimsIdentity;
Authinticated = myPrincipal.IsAuthenticated;
Name = myPrincipal.Name.ToString();
var myPrincipalType = myPrincipal.GetType();
if (myPrincipalType == typeof(ClaimsIdentity))
{
FirstName = myPrincipal.FindFirst(ClaimTypes.GivenName).Value != null? myPrincipal.FindFirst(ClaimTypes.GivenName).Value : "Test" ;
LastName = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Surname).Value;
Role = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Role)?.Value;
Name = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name)?.Value;
}
}
在View.cshtmlfile中我有这段代码
<div>
@{
var FirstName = MyWebsite.Models.Common.FirstName;
var LastName = MyWebsite.Models.Common.LastName;
var Name = MyWebsite.Models.Common.Name;
}
<p>FirstName = @FirstName</p>
<p>LastName = @LastName</p>
<p>Name = @Name</p>
</div>
不确定我错过了什么,以及为什么它会在网站上缓存我的信息。
答案 0 :(得分:0)
您需要做的就是直接从您的控制器或.cshtml文件访问ClaimsPrincipal.Current
。
目前尚不清楚为什么要使用静力学。如果您有其他未公开的要求,请在问题中加入。一般来说,静态不应该全部用于处理用户信息,这是一个巨大的安全风险,因为静态在用户会话中共享,并且可能引入各种危险的竞争条件。此外,静态工作在机器级别工作,因此如果您扩展了Web服务器,那么您在静态中共享的任何内容都不会在不同的服务器上共享。
通常,您应该使用会话,Cookie或外部存储空间。我建议的方法使用ASP.Net中开箱即用的机制来做正确的事情。