6

組み込みのWCF認証を拡張する必要があるため、新しい認証は組み込みのWCF認証と並行して機能する必要があります。

たとえば、登録済みIP(カスタム認証)またはユーザー名+パスワード(組み込み認証)からのアクセスを許可したいと思います。

私は正常に実装ServiceAuthenticationManagerしましたServiceAuthorizationManager

ServiceAuthenticationManager.AuthenticateIPrincipalメッセージプロパティに実装を追加するだけで、着信メッセージプロパティからプロパティにServiceAuthorizationManager.CheckAccessCoreコピーします。IPrincipalAuthorizationContext

しかし、私が戻ってきたり、電話をかけた結果でServiceAuthenticationManager.Authenticateあっても、標準的なメカニズムでは完全に壊れています。authPolicybase.Authenticate

多分私は間違った方向に行きましたか?既存の認証に影響を与えずに、カスタムWCF認証を追加する正しい方法は何ですか?カスタムが失敗した場合に組み込み認証にフォールバックするにはどうすればよいですか?

4

1 に答える 1

0

正しいアプローチ:

OnOpeningオーバーライドでServiceHostを設定します

Authorization.PrincipalPermissionMode = PrincipalPermissionMode.Custom;
Authorization.ExternalAuthorizationPolicies = new ReadOnlyCollection<IAuthorizationPolicy>(new[] { new MyCustomAuthorizationPolicy() });

カスタムポリシーのEvaluateメソッドで、評価コンテキスト「PrimaryIdentity」の3つのプロパティをIIdentityに、「Identities」をIDのコレクションに、「Principal」をIPrincipalに割り当てます。

evaluationContext.Properties["PrimaryIdentity"] = identity;
evaluationContext.Properties["Identities"] = new List<IIdentity>(new[] { identity });
evaluationContext.Properties["Principal"] = principal;
于 2012-05-23T16:42:40.200 に答える