繁体   English   中英

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

[英]Azure Active Directory retrieving same credentials for all users

我正在使用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.cshtml文件中,我有此代码

<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>

不知道我缺少什么,为什么它会在网站中缓存我的信息。

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

目前尚不清楚为什么要使用静态变量。 如果您还有其他未公开的要求,请在问题中注明。 一般来说, 不应完全使用静态方法来处理用户信息,这是巨大的安全风险,因为静态方法在用户会话之间共享,并且可能引入各种危险的竞争状况。 同样,静态变量在计算机级别工作,因此,如果您扩展Web服务器,则您在静态变量中共享的任何内容都不会在不同服务器之间共享。

通常,您应该使用会话,cookie或外部存储。 我建议的方法使用ASP.Net中的即用型机制来完成正确的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM