3

ページの 1 つに Silverlight アプリを含む Web アプリケーションがあります。Web サイトは WIF を使用して保護されています。Silverlight から自分の Web サイトと同じ appdomain でホストされているサービスに WCF 呼び出しを行おうとしています。

AspNetCompatibilityMode を有効にしている場合、これは正常に機能します。ブラウザーは既に認証されているため、WCF 呼び出しが行われると、Silverlight クライアントによって FedAuth Cookie が送信され、WIF はセッション Cookie (FedAuth/FedAuth1) から HttpContext.Current.User を正しく設定します。

残念ながら、AspNetCompatibilityMode をオフにする必要があります。この場合、Silverlight WCF 呼び出しが引き続き FedAuth Cookie をサーバーに渡し、SessionAuthenticationModule が Thread.CurrentPrincipal を正しく設定していることがわかります。残念ながら、sessionauthenticationmodule は、呼び出しようとしている実際の WCF メソッドとは別のスレッドで実行されているように見えるため、WCF/WIF パイプラインのどこかで ID を失いました。

これを回避する方法はありますか?SessionAuthenticationModule のカスタム実装を作成し、SetPrincipalFromSessionToken をオーバーライドしようとしましたが (その中でクレームなどにアクセスできます)、チャネル ハンドラーが呼び出しをディスパッチした後にプリンシパルにアクセスできるように、プリンシパルをどこに格納できるかわかりません。別のスレッドでサービスを提供します。

4

0 に答える 0