WCF и аутентификация Kerberos

Не забывайте, что можно добавить точку (.) вначале для сокрытия файлов и папок... Иначе я следовал бы *, ОТКЛОНЯЮТ соглашение о присвоении имен (из Википедии):

Большинство файловых систем UNIX

  • обработка Случая: чувствительное к регистру сохранение случая
  • Допустимый символ установило: любой.
  • Зарезервированные символы: /, null.
  • длина Max: 255.
  • Примечания: продвижение. указывает, что ls и файловые менеджеры не будут значением по умолчанию показывать Ссылку файла

на статью Википедии об именах файлов

9
задан Community 23 May 2017 в 12:00
поделиться

2 ответа

Что-то, что я заметил: похоже, что конфигурации клиента и сервера не согласуются с режимом безопасности.

В исходном разделе у вас есть <безопасность> .... . в web.config (опущен mode = "message") и на стороне клиента.

После вашего редактирования кажется, что клиентская сторона не изменилась , но сервер (web.config) теперь содержит .

На самом деле вопрос: можете ли вы гарантировать, что между клиентом всегда будет только один сетевой участок а вызываемый сервер? Т.е. это за корпоративным файерволом? В этом случае я бы рекомендовал привязку netTcp с на обоих концах.

Если это не так, то вы можете использовать wsHttpBinding (который поддерживает больше функций безопасности и надежности, но работает медленнее и «тяжелее») или basicHttpBinding. В этом случае вам придется использовать на обоих концах и аутентифицировать службу с помощью сертификата (чтобы служба и клиент имели общий "секрет", который следует использовать для шифрования).

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

Дэвид Сакштейн написал отличную серию сообщений в блоге , объясняющих пять сценариев безопасности, которые отраслевой гуру Джувал Лоуи назвал (в своей книге Программирование WCF - Библии WCF) наиболее общие и наиболее полезные - чтобы ограничить количество возможных комбинаций параметров, которые вы, возможно, захотите настроить. Один из них - сценарий «Интернет», который, вероятно, применим и здесь, если ваша служба ориентирована вовне.

Marc

3
ответ дан 4 December 2019 в 15:22
поделиться

Для меня текущая настройка действительно работает:

На сервере:

<system.serviceModel>
  <bindings>
    <wsHttpBinding>
      <binding name="wsHttpBindingConf" useDefaultWebProxy="true"/>
    </wsHttpBinding>
  </bindings>

  <services>
    <service behaviorConfiguration="returnFaults" name="Epze.BusinessLayer.ZeitManager">
        <endpoint binding="wsHttpBinding" bindingConfiguration="wsHttpBindingConf" contract="Epze.Contract.IZeitManager"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
  </services>

  <behaviors>
    <serviceBehaviors>
        <behavior name="returnFaults">
            <serviceMetadata httpGetEnabled="true"/>
            <serviceDebug includeExceptionDetailInFaults="true"/>
            <serviceAuthorization impersonateCallerForAllOperations="true"/>
        </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

Установите следующий атрибут для всех методов для WCF:

[OperationBehavior(Impersonation = ImpersonationOption.Required)]

На клиенте:

<system.serviceModel>
  <bindings>
    <wsHttpBinding>
        <binding name="WSHttpBinding_IZeitManager" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
            <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
            <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
            <security mode="Message">
                <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
                <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true"/>
            </security>
        </binding>
    </wsHttpBinding>
  </bindings>

  <behaviors>
    <endpointBehaviors>
        <behavior name="Delegation">
        <clientCredentials>
            <windows allowedImpersonationLevel="Delegation" />
        </clientCredentials>
        </behavior>
    </endpointBehaviors>
  </behaviors>        

  <client>
    <endpoint address="http://server.mydomain.net/ePZEsvc/ZeitManager.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IZeitManager" 
              contract="External.Epze.IZeitManager" name="WSHttpBinding_IZeitManager" behaviorConfiguration="Delegation">
        <identity>
            <servicePrincipalName value="HOST/localhost"/>
        </identity>                      
    </endpoint>
  </client>
</system.serviceModel>

HTH, Sven

7
ответ дан 4 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: