[英]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.