2011-10-19 5 views
3

カスタムServiceAuthorizationManagerを使用してCheckAccessをオーバーライドし、URLの一部であるカスタム認証トークンを検証します。私が検証した後、私はGenericPrincipalでThread.CurrentPrincipalを設定します。しかし、リクエストが最終的に私のサービスメソッドに到達すると、Thread.CurrentPrincipalはなくなりました。これは、認証マネージャで設定したものではありません。 どうしたのですか?WCFサービス認証マネージャーThread.CurrentPrincipalを設定します

答えて

6

私はサービスの認証マネージャを登録サービスの動作にprincipalPermissionMode =「なし」を設定しないことにより、この問題を回避ました:

は、詳細な紹介はこちらの記事を参照してください。これは、現在のスレッドにプリンシパルを置かないようにwcfランタイムに指示しているはずです。それを「カスタム」に設定すると、GenericPrincipalを使用して設定したプリンシパルを上書きします。

+0

あなたはあなたが言ったカスタム認証をどうやってやっていますか?これはPrincipalPermissionModeを 'None'として使用できますか? –

+0

私はログイン中に認証チケットを送り、クライアントはそれを追跡し、それを後続のサービスで使用します。 authticketが有効でない場合、私はServiceAuthorizationManagerの実装からfalseを返します。それが有効な場合、私はcurrrentスレッドで一般的なプリンシパルを設定します。あなたはNoneにprincipalPermissionModeを設定しない場合は、あなただけの設定、一般的な原理は、どこかにラインの下の上書きされます。 – sash

1

あなたは承認のための組み込みのメカニズムを使用したくない場合は、WCFは、現在のプリンシパルが適切WCFパイプラインに統合することがIAuthorizationPolicyを介して識別されている必要があります。 PrincipalPermissionModeに 'Custom'を指定する必要があります。 Authorization In WCF-Based Services

関連する問題