非常に頭が傷ついた単一の運用環境で問題が発生しています。2番目のユーザーのログイン時にContextSessionSecurityTokenが上書きされる
あなたは2人のユーザーAとBを持っています。ユーザーAがログインすると、すべて正常に動作します。ユーザーBがログインし、ユーザーBがログインした後、ユーザーAはユーザーBと同じセキュリティートークンを持つようになりました。
私たちのWIFセットアップはかなり標準的です。トークンにいくつかのカスタムクレームを注入します。トークンがどのように作成され、格納されているか(WIFによって処理される)と同じです。 AとBの両方が別々のマシン、または同じマシン上の別のブラウザになります私は
更新に慣れていないですWIFといくつかの奇妙なエッジケースに実行していることも同じよう
を感じます。
サービスif (HttpContext.Current == null)
return null;
if (HttpContext.Current.Cache == null)
return null;
if (FederatedAuthentication.SessionAuthenticationModule == null)
return null;
if (FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken == null)
return null;
var sessionToken = FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken;
if (sessionToken.ClaimsPrincipal == null)
throw new InvalidOperationException("The ClaimsPrincipal property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null");
if (sessionToken.ClaimsPrincipal.Identities == null)
throw new InvalidOperationException("The ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null");
if (sessionToken.ClaimsPrincipal.Identities.Count == 0)
throw new InvalidOperationException("The ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object has no identities");
if (sessionToken.ClaimsPrincipal.Identities[0] == null)
throw new InvalidOperationException("The first identity in the ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null");
if (sessionToken.ClaimsPrincipal.Identities[0].Claims == null)
throw new InvalidOperationException("The first identity in the ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object as a null Claims property");
return TokenUtility.GetDelegatedToken(IssuedTokenTypes.UserProfile | IssuedTokenTypes.AccountPermissions, sessionToken);
を要求するとき、私はここにログインし追加した場合、我々はトークンを取得し、私はこの時点ですることになっている名前からsessionToken.ClaimsPrincipal.Identity.Name
異なっを見ることができます
。
あなたはPCにログインし、Bは同じPC、同じブラウザセッションまたは何を使用するのですか? – nzpcmad
サイトが2つの異なるマシン/ブラウザーからブラウズされている場合は不可能です。トークンはサイトに送信され、クッキーに保存されます。静的変数にデータを格納するなど、間違ったことをしない限り、ユーザー間で共有する方法はありません。 –
@nzpcmad同じマシン上に2つの異なるブラウザを使用することができます。 2つの別々のマシンに置くことができます。 – jcolebrand