Обеспечение сервисной конечной точки WCF с пользовательской аутентификацией

Старый вопрос, но так как никто не упомянул это, я добавлю это из Поваренной книги Python:

Рецепт 81252: Используя dtuple для Гибкого Доступа Результата запроса

Этот рецепт специально предназначен для контакта с результатами базы данных, и dtuple решение позволяет Вам получать доступ к результатам по имени ИЛИ индексу. Это избегает необходимости получать доступ ко всему нижним индексом, который очень трудно поддержать, как отмечено в Вашем вопросе.

7
задан Shift 18 August 2009 в 17:40
поделиться

2 ответа

Я хочу защитить некоторую конечную точку Служба WCF, я не знаю, можете ли вы защитить некоторые конечные точки, а некоторые нет.

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

<bindings>
  <basicHttpBinding>
    <binding name="secured">
      <security mode="Message">
        <message ...... />
      </security>
    </binding>
    <binding name="unsecured">
      <security mode="None" />
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="WindowsFormsApplication11.WmsStatService" behaviorConfiguration="mex">
    <host>
      <baseAddresses>
        <add baseAddress="http://192.168.0.199:87" />
      </baseAddresses>
    </host>        

    <endpoint address="/Secured/Test" 
              binding="basicHttpBinding" bindingConfiguration="secured" 
              contract="WindowsFormsApplication11.IWmsStat" 
              behaviorConfiguration="MyServiceBehavior" />

    <endpoint address="/Unsecured/Test" 
              binding="basicHttpBinding" bindingConfiguration="unsecured" 
              contract="WindowsFormsApplication11.IWmsStat" 
              behaviorConfiguration="MyServiceBehavior" />

    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>

Марк

PS: не уверен, что это просто проблема с тем, что ваши сообщения больше не обновляются - вы заметили, что у вас есть две отдельные конфигурации поведения:

<behaviors>
    <serviceBehaviors>
      <behavior name="mex">
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
      </behavior>
      <behavior name="MyServiceBehavior">
        <serviceCredentials>
          <userNameAuthentication 
               userNamePasswordValidationMode="Custom" 
                customUserNamePasswordValidatorType="WindowsFormsApplication11.CustomValidator, CustomValidator" />
        </serviceCredentials>
      </behavior>
   </serviceBehaviors>      
</behaviors>

и ваша служба ссылается только на поведение "mex"? Это означает, что ваша служба действительно использует поведение , но НЕ один!

Вам необходимо объединить их в один а затем укажите только это:

<behaviors>
    <serviceBehaviors>
      <behavior name="Default">
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
        <serviceCredentials>
          <userNameAuthentication 
               userNamePasswordValidationMode="Custom" 
                customUserNamePasswordValidatorType="WindowsFormsApplication11.CustomValidator, CustomValidator" />
        </serviceCredentials>
      </behavior>
   </serviceBehaviors>      
</behaviors>
<services>
    <service name="...." behaviorConfiguration="Default" 

Марк

17
ответ дан 6 December 2019 в 10:02
поделиться

Если вы хотите защитить сообщение целиком, можно использовать режим безопасности транспорта. Если вы хотите, чтобы были зашифрованы / подписаны только ваши заголовки, режим безопасности сообщений позволяет это, но вам придется использовать wsHttpBinding. Вы также можете рассмотреть возможность использования Дайджеста для защиты учетных данных.

Что касается вашего примера, я думаю, что ваша комментируемая часть должна выглядеть так:

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

Вам также придется обновить объявление конечной точки:

<endpoint 
     address="https://192.168.0.199:87/Test" 
     binding="basicHttpBinding" bindingConfiguration="secure" 
     contract="WindowsFormsApplication11.IWmsStat" />

Вы не будете разрешено использовать обычный HTTP с транспортным режимом безопасности.

2
ответ дан 6 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

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