Silverlight и WCF с аутентификацией Windows - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть приложение Silverlight в веб-приложении ASP.NET. Затем у меня есть библиотека служб WCF, размещенная в приложении ASP.NET. Я настроил безопасность как TransportWithCredentialOnly и проверку подлинности Windows. Это сценарий интранета.

В IIS7 на тестовом сервере у меня отключена анонимная аутентификация и включена аутентификация Windows. При такой настройке вызовы WCF не выполняются.

Если я включаю анонимную аутентификацию, тогда она работает. Какой смысл аутентификации Windows, если анонимную аутентификацию нельзя отключить.

Когда я использовал Web Helper в IE, казалось, что был вызов службы, подобный тому, когда вы получаете определение службы, и для этого требуется анонимная аутентификация. Я полагаю, что фактические вызовы методов Сервиса все равно будут аутентифицированы правильно.

Может кто-нибудь, пожалуйста, пролить свет на это, потому что я в замешательстве. Через несколько месяцев у нас будут тестеры на проникновение, и я боюсь, что им не понравится идея, что они увидят вызов службы в Fiddler или подобном, который они могут затем скопировать и вставить в адресную строку, чтобы получить определение службы. Поработав с ними до того, как они станут очень точными, и любая информация, которую они могут получить из приложения, является знаком минус. В моей конкретной отрасли безопасность чрезвычайно важна.

Если я делаю это неправильно, любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 21 февраля 2011

Я уже боролся с той же проблемой.Я исправил свою проблему, изменив файл web.config.Вот что у меня ниже.

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

Удачи.

<system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="MyAp.Web.Services.MyAppSvc.customBinding0">
          <binaryMessageEncoding>
            <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />
          </binaryMessageEncoding>
          <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" authenticationScheme="Ntlm" unsafeConnectionNtlmAuthentication="true" />
        </binding>
      </customBinding>
    </bindings>
    <services>
      <service name="MyApp.Web.Services.MyAppSvc">
        <endpoint address="" binding="customBinding" bindingConfiguration="MyApp.Web.Services.MyAppSvc.customBinding0" contract="MyApp.Web.Services.MyAppSvc" />
        <!--<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>-->
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
...