基本認証を使用してクライアントから送信された資格情報を検証するカスタム メソッドを正常に呼び出すWCF REST サービスがあります。次のような構成:
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="RESTfulSecuritySH.CustomUserNameValidator,
RESTfulSecuritySH" />
そのメソッドを呼び出すと、ユーザーが検証され、以下にユーザーのすべての情報が入力されます *:
Thread.CurrentPrincipal.Identity
ただし、このメソッドが完了し、制御が最初に要求された RESTful メソッド(GetData など) に渡されると、値は取り込まれThread.CurrentPrincipal.Identity
ません。データが入力されていないため[PrincipalPermission]
、メソッドの属性を思い通りに使用できません。
ただし、ユーザーの資格情報 (名前、IsAuthenticated)OperationContext.Current.ServiceSecurityContext.PrimaryIdentity
がThread.CurrentPrincipal.Identity
入力されていますが、これはまたは[PrincipalPermission]
属性にマップされていないようです。ユーザーが承認されているかどうかを判断するためにコード内をいじることができることはわかってServiceSecurityContext
いますが、可能であれば代わりにメソッドの属性を使用したかったのです。
したがって、属性を適用すると、 「プリンシパル許可の要求が失敗しました」[PrincipalPermission]
というメッセージで常に失敗します。はもはや移入されていないため、これは理にかなっています。私の推測では、カスタムメソッドへの呼び出しが終了した後、スレッドはそのコンテキストを失いました。Thread.CurrentPrincipal.Identity
Validate
とにかく、私の全体的な質問は[PrincipalPermission]
、customUserNamePasswordValidatorType メソッドを呼び出した後に何らかの方法で使用できるかということです。