Пользовательский валидатор WCF для проверки учетных данных с basicHttpBinding, безопасностью транспорта и типом учетных данных клиента Basi c - PullRequest
0 голосов
/ 08 апреля 2020

Я читал документацию по конфигурации WCF и хотел бы получить подтверждение ограничения, с которым я столкнулся.

У меня есть клиент, который ожидает следующую конфигурацию привязки:

<bindings>
  <basicHttpBinding>
    <binding name="secureHttpBinding">
      <security mode="Transport">
        <transport clientCredentialType="Basic"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

На стороне сервера я реализовал пользовательский валидатор имени пользователя и пароля, потому что мы не используем Windows или учетные записи домена для клиентов. Я следовал этому руководству: https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-use-a-custom-user-name-and-password-validator, но они и другие примеры, которые я видел, используют wsHttpBinding или добавляют защиту сообщений.

Конечные точки и поведение сервера выглядят примерно так:

<services>
  <service name="MyWcfService.Service" behaviorConfiguration="MyBehavior">
    <endpoint
      address=""
      binding="basicHttpBinding"
      bindingConfiguration="secureHttpBinding"
      contract="MyWcfService.IService"/>
    <endpoint
      address="mex"
      binding="mexHttpsBinding"
      contract="IMetadataExchange"/>
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="MyBehavior">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <serviceCredentials>
        <userNameAuthentication
          userNamePasswordValidationMode="Custom" 
          customUserNamePasswordValidatorType="MyValidator, MyWcfService"/>
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>

При размещении службы в IIS с включенной аутентификацией basi c настраиваемый валидатор не срабатывает, IIS пытается проверить предоставленные учетные данные для учетных записей Windows и выдает сообщение об ошибке, если учетная запись пользователя этого не делает. Существуют:

HTTP-запрос не авторизован с помощью схемы аутентификации клиента 'Basi c'.

Поэтому невозможно иметь настраиваемый валидатор учетных данных для размещенной службы в IIS с базовым HttpBinding, режимом безопасности транспорта и типом учетных данных транспортного клиента Basi c? Нет ли способа переопределить базовую c Windows аутентификацию, которую выполняет IIS?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Пока что похоже, что с этой конфигурацией привязки невозможно использовать пользовательский валидатор учетных данных.

<basicHttpBinding>
<binding name="secureHttpBinding">
  <security mode="Transport">
    <transport clientCredentialType="Basic"/>
  </security>
</binding>

0 голосов
/ 13 апреля 2020

Мы должны использовать UserName аутентификацию вместо аутентификации Basi c, впоследствии мы могли бы иметь специальный валидатор учетных данных для этой службы.

  <basicHttpBinding>
     <binding name="mybinding">
       <security mode="TransportWithMessageCredential">
         <message clientCredentialType="UserName"/>
       </security>
     </binding>
   </basicHttpBinding>

 <serviceCredentials>
        <userNameAuthentication customUserNamePasswordValidatorType="WcfService3.CustUserNamePasswordVal,WcfService3" userNamePasswordValidationMode="Custom"/>
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>

Подробнее,
Как добавить аутентификацию пользователя / пароля в WCF
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

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