Запутался в аутентификации форм WCF и ASP.NET MembershipProvider - PullRequest
1 голос
/ 03 августа 2011

Чтение, просмотр видео, поиск в Интернете, я очень озадачен тем, как подключить WCF к приложению ASP.NET, которое использует проверку подлинности на основе форм с MembershipProvider. Я видел предложение, в котором вы использовали специализированный сервисный хост, объясненное здесь (http://msdn.microsoft.com/en-us/library/bb398990.aspx][1]):

<%@ ServiceHost Language="C#" 
                Service="System.Web.ApplicationServices.AuthenticationService" %>

Я также видел реализацию, которая делает это в ServiceFactory:

ServiceHost serviceHost = new ServiceHost (typeof(MyServices), baseAddresses)
                          {
                             Credentials =
                             {
                                UserNameAuthentication =
                                   {MembershipProvider = Membership.Provider}
                             },
                             Authorization =
                             {
                                PrincipalPermissionMode = PrincipalPermissionMode.UseAspNetRoles
                             }
                          };

serviceHost.Credentials.ServiceCertificate.SetCertificate(HttpContext.Current.Request.ServerVariables["HTTP_HOST"]);

Оба метода сбивают меня с толку. Для первого, где я могу указать свой конкретный контракт на обслуживание и что если у меня есть несколько услуг? Второй способ более понятен. Но в обоих случаях, что произойдет, если я попытаюсь получить доступ к защищенному каталогу проверки подлинности с помощью форм, например, mysite / admin / myservice.svc? Включается ли механизм безопасности как на уровне доступа к службе, так и на уровне каталога? Что если вы хотите использовать двух разных провайдеров членства, одного для доступа к файлу, а другого для действующей службы WCF? Это не было бы необычным сценарием.

Любая помощь была бы отличной, ошеломленной и растерянной.

1 Ответ

1 голос
/ 03 августа 2011

Прелесть WCF в том, что это можно сделать в web.config или с помощью кода (в зависимости от того, что вы предпочитаете).Аутентификация для WCF обрабатывается в поведении.Я обнаружил, что гораздо проще использовать web.config для моих привязок.Вот краткий пример того, как будет выглядеть конфигурация сервера.

<system.serviceModel>
<bindings>
   <wsHttpBinding> <!-- required since BasicHttpBinding has no security model -->
     <binding name="FormsAuthProvider">
       <security mode="Message">
         <message clientCredentialType="UserName" negotiateServiceCredentials="true"/>
       </security>
     </binding>
   </wsHttpBinding>
 </bindings>
 <behaviors>
   <serviceBehaviors>
      <behavior name="FormsAuthProvider">
        <serviceCredentials>
          <usernameAuthetication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="formsProvider"/>
        </serviceCredentials>    
      </behavior>
    </serviceBehaviors>
  </behaviors>    
  </system.serviceModel>  
  <system.web>
    <membership>
      <providers>
         <add name="formsProvider" type="..."/>
      </providers>
    </membership>
  </system.web>

Этот пример конфигурации работает с безопасностью сообщений, а не с безопасностью транспорта (режим безопасности).Если бы у вас была безопасность каталога в самой службе, она должна была бы пройти аутентификацию перед использованием конечной точки службы.

MSDN по какой-то причине не включает эту опцию в качестве общего сценария безопасности.

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