2013-02-20 6 views
10

非常に頭が傷ついた単一の運用環境で問題が発生しています。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異なっを見ることができます

+0

あなたはPCにログインし、Bは同じPC、同じブラウザセッションまたは何を使用するのですか? – nzpcmad

+2

サイトが2つの異なるマシン/ブラウザーからブラウズされている場合は不可能です。トークンはサイトに送信され、クッキーに保存されます。静的変数にデータを格納するなど、間違ったことをしない限り、ユーザー間で共有する方法はありません。 –

+0

@nzpcmad同じマシン上に2つの異なるブラウザを使用することができます。 2つの別々のマシンに置くことができます。 – jcolebrand

答えて

0

私は同様の問題を抱えています。私たちは、IISとコードの現金化を変更することを決議しました。キャッシングによってセキュリティが乱されているように見えましたが、サーバは生成されたhtmlの最終結果を保存していたため、ユーザAはログインしていてユーザBはログインしていないように見えました。

1

同じアプリケーションプールを使用して、同一のIIS上に依拠当事者とSTS(WIF)サーバーがホストされていますか?そうであれば、別のアプリケーションプールを使用してみてください。ワーカープロセスは時にはそれらを混乱させるために使用されます。これがあなたを助けることを願っています。

0

IISの構成と.NET Frameworkのバージョンだけでなく、Web構成の設定に関する追加情報を投稿した場合に役立ちます。私にとっては、これはアプリケーションプールの問題のように聞こえるが、それはあなたのシステムの知識が極端に限られている。アプリケーションプールIDがカスタムである場合は、もちろん、ローカルユーザーシステムまたは偽装が設定されていない限り、同じユーザーにアクセスします。これが問題ではない場合は、認証設定を確認して、アノニマスとベーシックがオフになっているか、アプリケーションに必要なものが何であるかを確認してください。

関連する問題