Как декларативно реализовать пользовательские IAuthorizationPolicy в WCF? - PullRequest
1 голос
/ 24 августа 2009

У меня есть служба WCF, размещенная в IIS. Я хочу использовать свой собственный 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 () никогда не срабатывает. Чего мне не хватает?

1 Ответ

1 голос
/ 24 августа 2009

Ну, очевидный (глупый) вопрос: в вашем <service> вы действительно ссылаетесь на свою конфигурацию поведения ??

т.е. у вас есть:

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

Просто определить все ваши вещи - это хорошо и хорошо - но если вы на самом деле не ссылались на них, это не принесет вам никакой пользы (был там, тоже сделал это!

Второй (почти такой же глупый) вопрос будет: какую конфигурацию связывания и безопасности вы используете ?? Вы вообще включали охрану? Если у вас <security mode="None">, то ваша авторизация службы, очевидно, никогда не будет использоваться (так как учетные данные вообще не передаются службе).

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...