2012-04-30 4 views
6

組み込みのWCF認証を拡張する必要があるため、新しいWCF認証を組み込む必要があります。WCF認証を延長する

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

ServiceAuthenticationManagerServiceAuthorizationManagerを正常に実装しました。

ServiceAuthenticationManager.Authenticateは単にメッセージのプロパティにIPrincipal実装、AuthorizationContext特性への着信メッセージのプロパティからServiceAuthorizationManager.CheckAccessCoreコピーIPrincipalを加算します。

しかし、私がauthPolicyまたはbase.Authenticate呼び出しの結果を返したとしても、ServiceAuthenticationManager.Authenticateは標準機構では完全に壊れています。

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

答えて

0

正しいアプローチ:OnOpeningで

セットアップのServiceHostアイデンティティのコレクションにカスタムポリシーの評価方法IIdentityに評価コンテキストの3つのプロパティ「PrimaryIdentity」を割り当てる、「アイデンティティ」で

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

をオーバーライドして、 IPrincipalの "プリンシパル"

evaluationContext.Properties["PrimaryIdentity"] = identity; 
evaluationContext.Properties["Identities"] = new List<IIdentity>(new[] { identity }); 
evaluationContext.Properties["Principal"] = principal;