2014-06-24 16 views
9

Attualmente sto utilizzando Thinktecture Identity Server versione 2.4 e Windows Identity Foundation per proteggere le comunicazioni tra l'applicazione .net e il server utilizzando token emessi.WIF (utilizzando Thinktecture Identity Server) e Duplex WCF Channels

Ho questo funzionamento su un canale TCP WCF standard standard esponendo un endpoint federato e utilizzando il metodo "CreateChannelWithIssuedToken (SecurityToken)" del channel factory per fornire il token di sicurezza restituito dalla richiesta di emissione.

Tuttavia non sembra esserci un metodo equivalente per DuplexChannelFactory che ci consenta di passare in un contesto di istanza. Ho letto questo articolo - http://msdn.microsoft.com/en-us/library/cc668765(v=vs.110).aspx - che descrive in dettaglio come creare i collegamenti duplex per ottenere ciò, tuttavia durante la creazione del canale non riesco a vedere alcun modo per impostare il token di sicurezza sul canale.

C'è la proprietà IssuedToken - http://msdn.microsoft.com/en-us/library/system.servicemodel.description.clientcredentials.issuedtoken(v=vs.110).aspx - sulle credenziali del client, tuttavia è di sola lettura.

Qualcuno ha raggiunto la sicurezza federata sul canale duplex utilizzando la modalità di sicurezza dei messaggi TCP che potrebbe offrire qualche consiglio?

risposta

3

Anche se la creazione manuale del canale e l'emissione del token da soli con il servizio token di sicurezza non è errata, è possibile sfruttare il framework WIF per farlo.

Se si configura il client tramite la configurazione per essere a conoscenza del STS, il framework recupererà il token stesso utilizzando le credenziali del messaggio impostate sul canale. Il framework imposterà quindi la proprietà "IssuedToken" sulle credenziali del canale.

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

Il frammento di codice di cui sopra mostra come è possibile creare un canale duplex utilizzando una conversazione sicura e un secureConversationBootstrap di prendersi cura della sicurezza federata.

Un vantaggio di questo è che è anche possibile impostare il proprio URI relying party, in modo da non dover utilizzare l'endpoint WCF come identificativo del proprio relying party.

Si sarebbe anche necessario impostare il comportamento del servizio federato per consentire WIF come segue (useIdentityConfiguration è importante, a quanto pare WIF su):

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

impostare l'endpoint del servizio è documentato qui: http://msdn.microsoft.com/en-us/library/cc668765(v=vs.110).aspx (a un certo punto)

Per quanto posso vedere, DuplexChannelFactory non espone alcun metodo per creare canali con token emessi durante il passaggio nel contesto dell'istanza.

Spero che questo aiuti!

Problemi correlati