WIF (с использованием Thinktecture Identity Server) и дуплексные каналы WCF

В настоящее время я использую Thinktecture Identity Server версии 2.4 и Windows Identity Foundation для защиты связи между приложением .net и сервером с использованием выпущенных токенов.

У меня это работает по стандартному TCP-каналу WCF NET, предоставляя федеративную конечную точку и используя метод «CreateChannelWithIssuedToken (SecurityToken)» фабрики каналов для предоставления маркера безопасности, возвращенного из запроса Issue.

Однако похоже, что для DuplexChannelFactory не существует эквивалентного метода, который позволяет нам передавать контекст экземпляра. Я прочитал эту статью — http://msdn.microsoft.com/en-us/library/cc668765%28v=vs.110%29.aspx — в котором подробно описано, как создать дуплексные привязки для достижения этой цели, однако при создании канала я не вижу способа установить токен безопасности на канал.

Существует свойство IssuedToken — http://msdn.microsoft.com/en-us/library/system.servicemodel.description.clientcredentials.issuedtoken%28v=vs.110%29.aspx — в учетных данных клиента, однако он доступен только для чтения.

Кто-нибудь добился федеративной безопасности по дуплексному каналу, используя режим безопасности TCP-сообщений, кто может дать совет?


person Sam Cartwright    schedule 24.06.2014    source источник


Ответы (1)


Хотя создание канала вручную и выдача токена с помощью STS не является ошибкой, вы можете воспользоваться инфраструктурой WIF, чтобы сделать это за вас.

Если вы настроите свой клиент с помощью конфигурации, чтобы он знал о STS, платформа сама получит токен, используя учетные данные сообщения, которые вы установили на канале. Затем платформа установит свойство «IssuedToken» в учетных данных канала.

<ws2007HttpBinding>
    <binding name="ws">
      <security mode="TransportWithMessageCredential">
        <message establishSecurityContext="false"
          negotiateServiceCredential="true"
                 clientCredentialType="UserName" />
      </security>
    </binding>
</ws2007HttpBinding>
<customBinding>
    <binding name="FederationDuplexTcpMessageSecurityBinding">
      <reliableSession />
      <security authenticationMode="SecureConversation">
            <secureConversationBootstrap authenticationMode="IssuedTokenForSslNegotiated">
                <issuedTokenParameters>
                    <issuer address="https://IdentityServer.domain/issue/wstrust/mixed/username" binding="ws2007HttpBinding" bindingConfiguration="ws" />
                    <issuerMetadata address="https://IdentityServer.domain/issue/wstrust/mex" />
                    <additionalRequestParameters>
                        <wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
                            <EndpointReference xmlns="http://www.w3.org/2005/08/addressing">
                              <Address>RelyingParty.com</Address>
                            </EndpointReference>
                        </wsp:AppliesTo>
                    </additionalRequestParameters>
                </issuedTokenParameters>
            </secureConversationBootstrap>
        </security>
    <tcpTransport />
    </binding>
</customBinding>

Фрагмент кода выше показывает, как вы можете создать дуплексный канал, используя Secure Conversation и secureConversationBootstrap, чтобы обеспечить федеративную безопасность.

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

Вам также потребуется настроить поведение федеративной службы для включения WIF следующим образом (useIdentityConfiguration важен, так как он включает WIF):

<behavior name="FederatedServiceBehaviour">
  <clientCredentials useIdentityConfiguration="true" supportInteractive="false" >
    <serviceCertificate/>
  </clientCredentials>
</behavior>

Настройка конечной точки службы описана здесь: http://msdn.microsoft.com/en-us/library/cc668765%28v=vs.110%29.aspx (в некоторой степени)

Насколько я вижу, сам DuplexChannelFactory не предоставляет никакого метода для создания каналов с выпущенными токенами при прохождении через контекст экземпляра.

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

person WillEllis    schedule 02.07.2014