2014-06-24 35 views
9

Obecnie używam Thinktecture Identity Server w wersji 2.4 i Windows Identity Foundation do zabezpieczenia komunikacji między aplikacją .net i serwerem przy użyciu wydanych tokenów.WIF (przy użyciu Thinktecture Identity Server) i dupleksowymi kanałami WCF

Mam to działa nad standardowym kanałem WCF NET TCP, eksponując federacyjny punkt końcowy i używając metody "CreateChannelWithIssuedToken (SecurityToken)" fabryki kanału, aby dostarczyć token bezpieczeństwa zwrócony z żądania Issue.

Wygląda jednak na to, że nie istnieje odpowiednia metoda dla DuplexChannelFactory, która umożliwia przekazanie w kontekście wystąpienia. Przeczytałem ten artykuł - http://msdn.microsoft.com/en-us/library/cc668765(v=vs.110).aspx - który szczegółowo opisuje sposób tworzenia powiązań duplex, aby to osiągnąć, jednak podczas tworzenia kanału nie widzę możliwości ustawienia tokena bezpieczeństwa na kanale.

Istnieje właściwość IssuedToken Property - http://msdn.microsoft.com/en-us/library/system.servicemodel.description.clientcredentials.issuedtoken(v=vs.110).aspx - na poświadczeniach klienta, ale jest ona tylko do odczytu.

Czy ktoś uzyskał bezpieczeństwo federacyjne w kanale dupleksowym przy użyciu trybu zabezpieczeń komunikatów TCP, który może udzielić porady?

Odpowiedz

3

Chociaż ręczne utworzenie kanału i samodzielne wystawienie tokena za pomocą STS nie jest złe, możesz skorzystać z frameworka WIF, aby zrobić to za Ciebie.

Jeśli konfigurujesz klienta poprzez konfigurację, aby mieć świadomość STS, struktura pobierze token za pomocą poświadczeń wiadomości ustawionych na kanale. Następnie struktura ustawi właściwość "IssuedToken" na poświadczeniach kanału.

<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> 

Fragment kodu powyżej pokazuje, w jaki sposób można utworzyć kanał dupleksu użyciu Secure Conversation i secureConversationBootstrap dbać o bezpieczeństwo stowarzyszonym.

Jedną z korzyści tego jest to, że możesz także ustawić URI swojego własnego użytkownika, więc nie musisz używać punktu końcowego WCF jako identyfikatora strony ufającej.

byłoby Należy również skonfigurować stowarzyszonego zachowanie serwisowym w celu umożliwienia WIF następująco (useIdentityConfiguration ważne jest, jak się okazuje WIF on):

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

konfigurowania punktu końcowego usługi jest udokumentowane tutaj: http://msdn.microsoft.com/en-us/library/cc668765(v=vs.110).aspx (do pewnego stopnia)

O ile widzę, sam DuplexChannelFactory nie udostępnia żadnej metody tworzenia kanałów z wydanymi tokenami podczas przechodzenia przez kontekst instancji.

Mam nadzieję, że to pomoże!