Megosztás a következőn keresztül:


Útmutató: Biztonsági környezeti jogkivonat létrehozása biztonságos munkamenethez

Az állapotalapú biztonsági környezet jogkivonatának (SCT) biztonságos munkamenetben való használatával a munkamenet képes ellenállni a szolgáltatás újrahasznált állapotának. Ha például egy állapot nélküli SCT-t használ egy biztonságos munkamenetben, és az Internet Information Services (IIS) alaphelyzetbe áll, akkor a szolgáltatáshoz társított munkamenetadatok elvesznek. Ezek a munkamenet-adatok egy SCT-jogkivonat-gyorsítótárat tartalmaznak. Ezért amikor az ügyfél legközelebb állapot nélküli SCT-t küld a szolgáltatásnak, a rendszer hibát ad vissza, mert az SCT-hez társított kulcs nem kérhető le. Ha azonban állapotalapú SCT-t használ, akkor az SCT-hez társított kulcs az SCT-ben található. Mivel a kulcs az SCT-ben található, és így az üzenetben található, a biztonságos munkamenetet nem befolyásolja a szolgáltatás újrafeldolgozása. A Windows Communication Foundation (WCF) alapértelmezés szerint állapot nélküli SCT-ket használ egy biztonságos munkamenetben. Ez a témakör bemutatja, hogyan használhat állapotalapú SCT-ket egy biztonságos munkamenetben.

Feljegyzés

Az állapotalapú SCT-k nem használhatók olyan biztonságos munkamenetben, amely egy olyan szerződést foglal magában, amely a következőből IDuplexChannelszármazik: .

Feljegyzés

A biztonságos munkamenetben állapotalapú SCT-ket használó alkalmazások esetében a szolgáltatás szálidentitásának egy társított felhasználói profillal rendelkező felhasználói fióknak kell lennie. Ha a szolgáltatás olyan fiók alatt fut, amely nem rendelkezik felhasználói profillal, például Local Servicekivételt okozhat.

Feljegyzés

Ha megszemélyesítésre van szükség Windows XP rendszeren, használjon biztonságos munkamenetet állapotalapú SCT nélkül. Ha az állapotalapú SCT-ket megszemélyesítéssel használják, a rendszer egy InvalidOperationException hibát ad ki. További információ: Nem támogatott forgatókönyvek.

Állapotalapú SCT-k használata biztonságos munkamenetben

  • Hozzon létre egy egyéni kötést, amely meghatározza, hogy a SOAP-üzeneteket egy állapotalapú SCT-t használó biztonságos munkamenet védi.

    1. Egyéni kötés definiálásához> adjon hozzá egy <egyéni kötést a szolgáltatás konfigurációs fájljába.

      <customBinding>  
      </customBinding>
      
    2. Adjon hozzá egy kötési <> gyermekelemet a< customBindinghez.>

      Adjon meg egy kötésnevet úgy, hogy az name attribútumot egy egyedi névre állítja be a konfigurációs fájlban.

      <binding name="StatefulSCTSecureSession">  
      </binding>
      
    3. Adja meg a szolgáltatásba és a szolgáltatásból küldött üzenetek hitelesítési módját egy <biztonsági> gyermekelem hozzáadásával a <customBindinghez>.

      Adja meg, hogy a rendszer biztonságos munkamenetet használjon az authenticationMode attribútum SecureConversationbeállításával. Az állapotalapú SCT-k használatát az requireSecurityContextCancellation attribútum falsebeállításával adhatja meg.

      <security authenticationMode="SecureConversation"  
                requireSecurityContextCancellation="false">
      </security>
      
    4. Adja meg, hogyan hitelesíti az ügyfelet a biztonságos munkamenet létrehozása közben egy secureConversationBootstrap> gyermekelem hozzáadásával a< biztonsághoz>.<

      Adja meg az ügyfél hitelesítésének módját az authenticationMode attribútum beállításával.

      <secureConversationBootstrap authenticationMode="UserNameForCertificate" />  
      
    5. Adja meg az üzenet kódolását egy kódolási elem( például <textMessageEncoding>) hozzáadásával.

      <textMessageEncoding />  
      
    6. Adja meg az átvitelt egy átviteli elem, például a <httpTransport> hozzáadásával.

      <httpTransport />  
      

    Az alábbi példakód konfigurációval határoz meg egy egyéni kötést, amelyet az üzenetek használhatnak állapotalapú SCT-kkel egy biztonságos munkamenetben.

    <customBinding>  
      <binding name="StatefulSCTSecureSession">  
        <security authenticationMode="SecureConversation"  
                  requireSecurityContextCancellation="false">  
          <secureConversationBootstrap authenticationMode="UserNameForCertificate" />  
        </security>  
        <textMessageEncoding />  
        <httpTransport />  
      </binding>  
    </customBinding>  
    

Példa

Az alábbi példakód létrehoz egy egyéni kötést, amely a MutualCertificate hitelesítési módot használja egy biztonságos munkamenet elindításához.

SecurityBindingElement security = SecurityBindingElement.CreateMutualCertificateBindingElement();

// Use a secure session and specify that stateful SecurityContextToken security tokens are used.
security = SecurityBindingElement.CreateSecureConversationBindingElement(security, false);

// Specify whether derived keys are needed.
security.SetKeyDerivation(true);

// Create the custom binding.
CustomBinding myBinding = new CustomBinding(security, new HttpTransportBindingElement());

// Create the Type instances for later use and the Uri for
// the base address.
Type contractType = typeof(ICalculator);
Type serviceType = typeof(Calculator);
Uri baseAddress = new
    Uri("http://localhost:8036/serviceModelSamples/");

// Create the ServiceHost and add an endpoint, then start
// the service.
ServiceHost myServiceHost =
    new ServiceHost(serviceType, baseAddress);
myServiceHost.AddServiceEndpoint
    (contractType, myBinding, "secureCalculator");
myServiceHost.Open();
Dim security As SecurityBindingElement = SecurityBindingElement.CreateMutualCertificateBindingElement()


' Use a secure session and specify that stateful SecurityContextToken security tokens are used.
security = SecurityBindingElement.CreateSecureConversationBindingElement(security, False)

' Specify whether derived keys are needed.      
security.SetKeyDerivation(True)

' Create the custom binding.
Dim myBinding As New CustomBinding(security, New HttpTransportBindingElement())

' Create the Type instances for later use and the Uri for 
' the base address.
Dim contractType As Type = GetType(ICalculator)
Dim serviceType As Type = GetType(Calculator)
Dim baseAddress As New Uri("http://localhost:8036/serviceModelSamples/")

' Create the ServiceHost and add an endpoint, then start
' the service.
Dim myServiceHost As New ServiceHost(serviceType, baseAddress)
myServiceHost.AddServiceEndpoint(contractType, myBinding, "secureCalculator")
myServiceHost.Open()

Ha a Windows-hitelesítést állapotalapú SCT-vel kombinálják, a WCF nem tölti fel a WindowsIdentity tulajdonságot a tényleges hívó identitásával, hanem névtelenre állítja a tulajdonságot. Mivel a WCF-biztonságnak újra létre kell hoznia a szolgáltatásbiztonsági környezet tartalmát a bejövő SCT minden kéréséhez, a kiszolgáló nem követi nyomon a biztonsági munkamenetet a memóriában. Mivel a példányt nem lehet szerializálni az WindowsIdentity SCT-ben, a WindowsIdentity tulajdonság névtelen identitást ad vissza.

Az alábbi konfiguráció ezt a viselkedést mutatja.

<customBinding>  
  <binding name="Cancellation">  
       <textMessageEncoding />  
        <security
            requireSecurityContextCancellation="false">  
              <secureConversationBootstrap />  
        </security>  
    <httpTransport />  
  </binding>  
</customBinding>  

Lásd még