/ AppPoolによるリサイクル/ WSFederation&Manual ClaimsIdentityリサイクル - c#、ID、クレームベースのID、WSフェデレーション

WSFederationおよびManual ClaimsIdentity with AppPoolリサイクル - c#、identity、claim-based-identity、ws-federation

両方をサポートする必要があるアプリケーションがありますフェデレーション(IdP開始)および手動認証(標準のユーザー名/パスワード形式)。そのため、私は.NET v4.5 System.Identityを使用してアプリケーションの要求を認識させます。

私達がdevで見ている問題はいつでもAppPoolのリサイクルが発生し(再コンパイルのように)、ページをリロードするか、他の操作を行うと、カスタムクレームのいずれかにアクセスしようとしてエラーが発生します。ユーザーが まだ認証されていますが、カスタム請求は完全になくなりました。機能し続けるためには、ブラウザのすべてのインスタンスを閉じて再度ログインする必要があります。これは明らかに自然の中で起こる可能性があり、私たちが起こすことができないことです(ひどいエンドユーザーエクスペリエンス)。

間違ったことをしているのか、それともこの状態をトラップ/検出してユーザーに再度ログインさせることができるのでしょうか。

バックグラウンド

手動ログインの場合は、CustomClaimsIdentityインスタンスは新しいClaimsPrincipalに渡され、これを使用して新しいSessionSecuirytTokenインスタンスが作成され、次のように書き出されます。

var claims = CustomClaimsAuthenticationManager.BuildClaimsList( user );
var identity = new UniversalIdentity( claims, AuthenticationTypes.Password );
var principal = new ClaimsPrincipal( identity );
var token = new SessionSecurityToken( principal, TimeSpan.FromMinutes( user.Customer.SessionExp ?? 120 ) );
var sam = FederatedAuthentication.SessionAuthenticationModule;
sam.WriteSessionTokenToCookie( token );

Idpによって開始されたログインの場合には、 FederatedAuthentication.WSFederationAuthenticationModule.SignedIn 手動認証の場合と同じ方法で、提供されたクレームを検証し、アプリがIDに追加するカスタムクレームを作成するためのイベントを生成してチェックを実行します。

回答:

回答№1は0

あなたは安全にキャストすることができます IPrincipalClaimsPrincipal

ClaimsPrincipal cp = (ClaimsPrincipal)Thread.CurrentPrincipal;