Как предоставить доступ к веб-службе WCF, размещенной в IIS, только для определенных пользователей?

#c# #wcf #web-services

#c# #wcf #веб-службы

Вопрос:

У меня есть веб-служба, которая использует проверку подлинности Windows. Веб-служба размещена в IIS. Возможно ли сузить доступ к этой веб-службе только для нескольких конкретных пользователей? Моя текущая веб-конфигурация:

 <services>
  <service name="LANOS.SplunkSearchService.SplunkSearch">
    <endpoint binding="basicHttpBinding" bindingConfiguration="basicHttp"
      contract="LANOS.SplunkSearchService.ISplunkSearch" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>

<bindings>
  <basicHttpBinding>
    <binding name="basicHttp" allowCookies="true" maxBufferSize="20000000"
      maxBufferPoolSize="20000000" maxReceivedMessageSize="20000000">
      <readerQuotas maxDepth="32" maxStringContentLength="200000000"
        maxArrayLength="200000000" />
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
 

Кстати, я попробовал решение, похожее на это, которое я нашел в Интернете:

     <authentication mode="Windows"/>

    <authorization>

          <allow roles=".Developers"/>

          <allow users="DOMAINServiceAccount"/>

          <deny users="*"/>

    </authorization>
 

Однако это не работает. : ( Это позволяет всем пользователям домена проходить.

Комментарии:

1. Вы отключили анонимную проверку подлинности и включили проверку подлинности Windows для приложения, в котором размещена ваша служба WCF в IIS?

Ответ №1:

Профессиональный WCF 4 от Wrox описывает способ настройки аутентификации по имени пользователя / паролю в главе 8. Подводя итог, вам нужен пользовательский валидатор:

 public class MyCustomUserNamePasswordValidator : UserNamePasswordValidator
{
   public override void Validate(string userName, string password)
   {
     if(userName != "foo" amp;amp; password != "bar") 
     {
        throw new SecurityTokenValidationException("Invalid user");
     }
   }
}
 

После этого вам нужно добавить изменить свой элемент userNameAuthentication в конфигурации службы на «Пользовательский» и определить средство проверки:

  <userNameAuthentication
      userNamePasswordValidationMode = "Custom"
          customUserNamePasswordValidatorType =
          "Common.MyCustomUserNamePasswordValidator, Common" />
 

Надеюсь, это поможет.

Комментарии:

1. Хорошо, я попробую, но я не верю, что вы не можете заставить его работать без изменения кода WS. Я все еще надеюсь, что смогу заставить его работать, только изменив веб-конфигурацию.