4

WCFサービスクラスのコンストラクターで、現在のプリンシパルをメッセージのヘッダーで渡されたプリンシパルのプリンシパルに設定しています。

Thread.CurrentPrincipal = OperationContext.Current.IncomingMessageHeaders.GetHeader<BBPrincipal>("bbPrincipal", "ns");

これは問題なく機能しているようですが、メソッドでプリンシパルを参照すると、Thread.CurrentPrincipalがWindowsPrincipalに戻りました。

おそらく、メソッドは別のスレッドで起動しています。メソッドがサービスのコンストラクターで設定されたプリンシパルを使用していることを確認するにはどうすればよいですか?

4

2 に答える 2

8

元の質問に対する答えを見つけました。WCF がプリンシパルを空のプリンシパルでオーバーライドするのを停止するには、動作構成で次のように設定します。

<serviceAuthorization principalPermissionMode="None" />

シンプルで、既存のコード ベースを大幅に変更する必要はありません。

参照: http://connect.microsoft.com/VisualStudio/feedback/details/369445/wcf-service-configured-for-transport-security-shouldnt-change-thread-currentprincipal

于 2010-11-11T10:05:45.470 に答える
4

WCFは常にAuthorizationPolicyにプリンシパルを設定するため、変更が上書きされる可能性があります。カスタム承認ポリシーを実装し、そこにプリンシパルを設定する必要があります。

于 2010-09-20T09:27:42.323 に答える