2017-09-08 11 views
0

私はAzure Active Directory(AAD)を使用して、ASP.Net MVC Webサイトにログインしているユーザーを認証しています。ホームページには、現在ログインしているユーザー情報が表示されるはずですが、ログインしたユーザーではなく自分の情報が常に表示されます。 Common.csという静的なクラスがあり、FirstName、LastName、およびNameが静的な文字列としてあります。私は、私が行方不明だし、なぜそれがで私の情報をキャッシュしているものAzure Active Directoryすべてのユーザーに対して同じ資格情報を取得しています

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

わからないこのコードを持ってView.cshtmlfileで

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

:ここ

は、私が使用しているコードです。ウェブサイト。

答えて

0

あなたがする必要があるのは、コントローラまたは.cshtmlファイルから直接ClaimsPrincipal.Currentにアクセスすることです。

なぜ静的を使用しているのかは不明です。あなたに別の非公開の要件がある場合、それを質問に含めてください。一般に、の統計情報はユーザー情報を処理するためにALL ALLで使用されるべきではありません。これはセキュリティリスクが非常に高いです。これは統計情報がユーザーセッション全体で共有され、あらゆる種類の危険な競合状態を招く可能性があります。また、スタティックはマシンレベルで動作するため、Webサーバーをスケールアウトすると、静的に共有しているものはすべて、異なるサーバー間で共有されることはありません。

通常、セッション、Cookie、または外部ストレージを使用する必要があります。私が提案したアプローチは、正しいことをするASP.Netのすぐに使えるメカニズムを使用しています。

関連する問題