2014-06-24 5 views
9

Ich verwende derzeit Thinktecture Identity Server Version 2.4 und Windows Identity Foundation, um die Kommunikation zwischen .net-Anwendung und Server unter Verwendung ausgestellter Token zu sichern.WIF (unter Verwendung von Thinktecture Identity Server) und Duplex-WCF-Kanäle

Ich arbeite über einen WCF-Standard-TCP-Kanal, indem ich einen Verbund-Endpunkt offenlege und die Methode "CreateChannelWithIssuedToken (SecurityToken)" der Kanalfactory dazu nutze, das von der Issue-Anforderung zurückgegebene Sicherheitstoken bereitzustellen.

Es scheint jedoch keine gleichwertige Methode für die DuplexChannelFactory zu geben, die es uns ermöglicht, einen Instanzkontext zu übergeben. Ich habe diesen Artikel gelesen - http://msdn.microsoft.com/en-us/library/cc668765(v=vs.110).aspx - der Details beschreibt, wie die Duplexbindungen erstellt werden, um dies zu erreichen, aber beim Erstellen des Kanals kann ich keine Möglichkeit sehen, das Sicherheitstoken auf dem Kanal zu setzen.

Es gibt die IssuedToken-Eigenschaft - http://msdn.microsoft.com/en-us/library/system.servicemodel.description.clientcredentials.issuedtoken(v=vs.110).aspx - auf den Client-Anmeldeinformationen, jedoch ist es schreibgeschützt.

Hat jemand Föderierte Sicherheit über Duplex-Kanal mit TCP-Nachrichtensicherheitsmodus erreicht, der einen Rat geben könnte?

Antwort

3

Obwohl das manuelle Erstellen des Kanals und das Ausgeben des Tokens selbst mit dem STS nicht falsch ist, können Sie das WIF-Framework dazu nutzen, dies für Sie zu tun.

Wenn Sie Ihren Client über die Konfiguration konfigurieren, um auf den STS zu achten, ruft das Framework das Token selbst mit den Anmeldeinformationen ab, die Sie für den Kanal festgelegt haben. Das Framework wird dann die Eigenschaft "IssuedToken" für die Anmeldeinformationen des Kanals festlegen.

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

Der Codeausschnitt oben zeigt, wie Sie einen Duplexkanal mit einer Secure Conversation und einem secureConversationBootstrap Pflege von föderierten Sicherheit zu übernehmen erstellen können.

Ein Vorteil besteht darin, dass Sie auch Ihre eigene vertrauende Partei-URI einrichten können, sodass Sie den WCF-Endpunkt nicht als Kennung Ihrer vertrauenden Seite verwenden müssen.

Sie würden auch die föderierte Serviceverhalten einzurichten müssen WIF wie folgt zu aktivieren (useIdentityConfiguration ist wichtig, da es WIF antörnt):

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

den Service-Endpunkt Einrichtung ist hier dokumentiert: http://msdn.microsoft.com/en-us/library/cc668765(v=vs.110).aspx (zu einem gewissen Grad)

Soweit ich sehen kann, stellt die DuplexChannelFactory selbst keine Methode zum Erstellen von Kanälen mit ausgegebenen Token beim Durchlaufen des Instanzkontextes zur Verfügung.

Hoffe, das hilft!