我有一个托管在IIS中的WCF服务。我想使用自己的IAuthorizationPolicy,并在服务器上的web.config文件中配置它。我有我的身份验证政策:
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()方法永远不会触发。我错过了什么?
答案 0 :(得分:1)
嗯,明显(愚蠢)的问题是:在你的<service>
中,你真的引用了你的行为配置吗?
即。你有:
<system.serviceModel>
....
<service name="YourService" behaviorConfiguration="Behavior">
....
</service>
....
</system.serviceModel>
只是定义你所有的东西都很好但是 - 除非你真的引用它,它对你没有任何好处(去过那里,也是我自己做的!:-))
第二个(几乎是愚蠢的)问题是:你使用什么绑定和安全配置?你有没有打开保安?如果您有<security mode="None">
,那么您的服务授权显然也不会被使用(因为根本没有凭据传递给服务)。
马克