Режим безопасности WCF TransportWithMessageCredential

У меня нет службы WCF, работающей как служба Windows, которую я преобразовал для использования Custom UserNamePasswordValidator.

Все это отлично работало при исходной настройке SecurityMode = "Transport".

Однако единственная проблема в том, что ни одно из ошибок не вернется правильно. Я предположил, что это потому, что это должен быть режим безопасности TransportWithMessageCredential.

Проблема, с которой я столкнулся, заключается в том, что когда я устанавливаю режим безопасности TransportWithMessageCredential, метод проверки UserNamePasswordValidator теперь не используется.

Ниже мой app.config. Любой совет будет очень признателен.

Спасибо.

 <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
    <connectionStrings>
      <!-- hidden -->
    </connectionStrings>
    <system.serviceModel>
        <services>
            <service name="ThisApp.Global.Service.ServiceImpl" behaviorConfiguration="serviceBehaviour">
              <host>
                <baseAddresses>
                  <add baseAddress="https://testapi.ThisApp.com" />
                </baseAddresses>
              </host>
              <endpoint address="" binding="wsHttpBinding" bindingConfiguration="TransportSecurity" contract="ThisApp.Global.Service.IServiceImpl" />
            </service>
        </services>

      <!--WCF Service Binding Configurations-->
      <bindings>
        <wsHttpBinding>
          <binding name="TransportSecurity">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"  maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
            <security mode="TransportWithMessageCredential">
              <message clientCredentialType="UserName"/>
            </security>
          </binding>
        </wsHttpBinding>
      </bindings>

      <behaviors>
        <serviceBehaviors>
          <behavior name="serviceBehaviour">
            <serviceMetadata httpGetEnabled="False" httpsGetEnabled="True" />
            <serviceDebug includeExceptionDetailInFaults="True"/>
         <serviceAuthorization principalPermissionMode="Custom">
               <authorizationPolicies>
                 <add policyType="ThisApp.Global.Service.Security.AuthorizationPolicy, ThisApp.Global.Service" />
              </authorizationPolicies>
            </serviceAuthorization>
            <serviceCredentials>
              <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="ThisApp.Global.Service.Security.CustomUserNameValidator, ThisApp.Global.Service" />
            </serviceCredentials>
          </behavior>
        </serviceBehaviors>
      </behaviors>

    </system.serviceModel>

    <system.diagnostics>
    <trace autoflush="true" indentsize="2">
      <listeners>
        <add name="myListener"
          type="System.Diagnostics.EventLogTraceListener"
          initializeData="ThisApp Global API" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

person JIbber4568    schedule 10.06.2014    source источник


Ответы (1)


Вам необходимо включить транспорт в раздел безопасности привязки, таким образом:

<binding name="TransportSecurity">
    <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" />
        <transport clientCredentialType="Basic" />
    </security>
</binding>
person Simon Halsey    schedule 10.06.2014
comment
Спасибо за ваш ответ. К сожалению, это не имеет значения. Любая попытка доступа к службе приводит к следующему: сообщение не может быть обработано. Скорее всего, это вызвано неправильным действием, или сообщение содержит недопустимый или просроченный токен контекста безопасности, или несоответствие между привязками. - person JIbber4568; 10.06.2014
comment
Также сделал быстрое редактирование выше, поскольку он работает как служба Windows и, следовательно, представляет собой app.config, а не веб. Ваше здоровье - person JIbber4568; 10.06.2014
comment
Хм. Я делаю то же самое. basicHttpBinding с размещенной службой IIS с использованием настраиваемого диспетчера аутентификации. Все, что мне было нужно, это конфигурация выше. - person Simon Halsey; 10.06.2014
comment
Ваше здоровье. Могу только предположить, что это как-то связано с тем, что я запускаю его как службу. - person JIbber4568; 10.06.2014