2009-08-24 5 views
1

私はIISでホストされているWCFサービスを持っています。自分のIAuthorizationPolicyを使用して、サーバー上のweb.configファイルで設定する必要があります。WCFでカスタムIAuthorizationPolicyを宣言的に実装する方法は?

namespace MyLib.WCF 
{ 
    public class CustomAuthorizationPolicy : IAuthorizationPolicy 
    { 
     public CustomAuthorizationPolicy() 
     { 
      this.Id = Guid.NewGuid().ToString(); 
     } 

     public bool Evaluate(EvaluationContext evaluationContext, ref object state) 
     { 
      throw new ApplicationException("Testing custom auth"); 
     } 
     ... 
    } 
} 

そして、私のweb.configファイルで:

<service behaviorConfiguration="Behavior" name="MyService"> 
    <endpoint address="" binding="wsHttpBinding" contract="IMyService"/>    
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
</service> 
<serviceBehaviors> 
    <behavior name="Behavior"> 
     <serviceAuthorization principalPermissionMode="Custom"> 
      <authorizationPolicies> 
     <add policyType="MyLib.WCF.CustomAuthorizationPolicy, MyLib.WCF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
      </authorizationPolicies> 
     </serviceAuthorization> 
    </behavior> 
</serviceBehaviors> 

しかし、私のCustomAuthorizationPolicy.Evaluate()メソッドは、発火決して私は私の認証ポリシーを持っています。私は何が欠けていますか?

答えて

1

あなたの<service>では、あなたの行動設定を実際に参照していますか?

I.e.あなたが持っているん:

<system.serviceModel>  
.... 
    <service name="YourService" behaviorConfiguration="Behavior"> 
     .... 
    </service> 
.... 
</system.serviceModel> 

ただ、すべて自分のものを定義することは素晴らしく、よくある - しかし、あなたが実際にそれを参照していない限り、それはあなたに何か良いを行うことはありません(あまりにも、そこにあったことを自分自身を行って:! - ))

第2の(ほとんど愚かな)質問は次のようになります。どのバインディングとセキュリティ設定を使用しますか?あなたはまったくセキュリティをオンにしたことがありますか? <security mode="None">をお持ちの場合は、(サービスに資格情報がまったく渡されていないため)サービス許可が明らかに使用されることはありません。

Marc

+0

大きな質問ですが、それは通常私を得る明白なものです!上記のコードスニペットにサービス設定を追加しましたが、あなたの質問に答えるために:1)私はbehaviorConfigurationを参照しています2)私はwsHttpBindingを使用していますが、セキュリティモードは設定されていませんなし? – MrDustpan

+0

いいえ、実際には、wsHttpバインディングはWindows資格情報を使用するメッセージベースのセキュリティに既定されています。それは問題ではありません.... –

関連する問題