Azure Active Directory为所有用户检索相同的凭据

时间:2017-09-08 19:59:18

标签: c# asp.net asp.net-mvc azure azure-active-directory

我使用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>

不确定我错过了什么,以及为什么它会在网站上缓存我的信息。

1 个答案:

答案 0 :(得分:0)

您需要做的就是直接从您的控制器或.cshtml文件访问ClaimsPrincipal.Current

目前尚不清楚为什么要使用静力学。如果您有其他未公开的要求,请在问题中加入。一般来说,静态不应该全部用于处理用户信息,这是一个巨大的安全风险,因为静态在用户会话中共享,并且可能引入各种危险的竞争条件。此外,静态工作在机器级别工作,因此如果您扩展了Web服务器,那么您在静态中共享的任何内容都不会在不同的服务器上共享。

通常,您应该使用会话,Cookie或外部存储空间。我建议的方法使用ASP.Net中开箱即用的机制来做正确的事情。