2

Как мы могли аутентифицировать/разрешать службу WCF RESTful (которая использует webHttpBinding (а не wsHttpBinding, как в случае с SOAP))? I.e. мы хотим использовать членство/роли для разрешения (или запрещения) использования пользователем каждого веб-метода в соответствии с его ролью.Служба безопасности RESTful WCF

Заранее спасибо. Илан.

+0

@simchona SOAP - Протокол простого доступа к объектам – Ilan

+0

Можете ли вы опубликовать часть своего конфигурационного файла, чтобы узнать, как реализована ваша служба REST? Это через Restful API или использование конечных точек, определенных с помощью webHttpBinding? – Rajesh

ответ

4

Вы можете использовать сертификаты для обеспечения безопасности или отправить имя пользователя и пароль в заголовке. Затем вы можете добавить поведение, выполнив IAuthorizationPolicy службе, чтобы вам не приходилось выполнять проверку безопасности в каждом методе веб-службы, который вы раскрываете.

public class CertificateAuthorizationPolicy : IAuthorizationPolicy 
{ 

    public bool Evaluate(EvaluationContext evaluationContext, ref object state) 
    { 
     IIdentity identity; 
     object untypedIdentities; 
     if (!evaluationContext.Properties.TryGetValue("Identities", out untypedIdentities)) 
     { 
      identity = null; 
      return false;                            
     } 

     var identities = (IEnumerable<IIdentity>)untypedIdentities; 

     identity = identities.Where(item => item.AuthenticationType == "X509").FirstOrDefault(); 

     var claimSet = (X509CertificateClaimSet)evaluationContext.ClaimSets[0]; 
     var certificate = claimSet.X509Certificate; 

    } 

В web.config вы говорите службы использовать политику авторизации

<behavior name="CertificateSecurityServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceAuthorization principalPermissionMode="Custom"> 
     <authorizationPolicies> 
      <add policyType="CertificateAuthorizationPolicy, MyAssembly.Security" /> 
     </authorizationPolicies> 
     </serviceAuthorization> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
    </behavior> 

Другой вариант заключается в настройке SSL на сервере IIS так, что он требует SSL и сертификата клиента для подключения к любой странице ,

+0

Очень интересно .. Мы уже купили и установили сертификат VeriSign - использовать https вместо http. Для IOperationBehavior, могу ли я использовать его с webHttpBinding? Не могли бы вы указать мне фрагмент кода? Благодарю. – Ilan

+0

Я добавил ссылку с примером реализации – Mharlin

+0

Отличная статья, спасибо. Но мы по-прежнему не знаем, как использовать IOperationBehavior, который вы предложили, разрешить/запретить доступ к веб-методам с помощью Microsoft Membership/Roles. – Ilan