Gör så här: Ange säkerhetsläget

Säkerhet i Windows Communication Foundation (WCF) har tre vanliga säkerhetslägen som finns på de flesta fördefinierade bindningar: transport, meddelande och "transport med meddelandeautentiseringsuppgifter". Två ytterligare lägen är specifika för två bindningar: läget "endast transportautentiseringsuppgifter" som finns i BasicHttpBindingläget , och "Båda", som finns i NetMsmqBinding. Det här avsnittet fokuserar dock på de tre vanliga säkerhetslägena: Transport, Messageoch TransportWithMessageCredential.

Observera att inte alla fördefinierade bindningar stöder alla dessa lägen. Det här avsnittet anger läget med WSHttpBinding klasserna och NetTcpBinding och visar hur du ställer in läget både programmatiskt och via konfiguration.

Mer information finns i WCF-säkerhet i Säkerhetsöversikt, Skydda tjänster och Skydda tjänster och klienter. Mer information om transportläge och meddelande finns i Transportsäkerhet och Meddelandesäkerhet.

Så här anger du säkerhetsläget i kod

  1. Skapa en instans av bindningsklassen som du använder. För en lista över fördefinierade bindningar, se System-Provided Bindningar. I det här exemplet skapas en instans av WSHttpBinding klassen.

  2. Ange egenskapen för Mode objektet som returneras av Security egenskapen.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    

    Du kan också ange läget som meddelande, som du ser i följande kod.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    

    Eller ställ läget till transport med meddelandelegitimationer, som du ser i följande kod.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.TransportWithMessageCredential;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.TransportWithMessageCredential
    
  3. Du kan också ange läget i konstruktorn för bindningen, enligt följande kod.

    WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
    
    Dim b As New WSHttpBinding(SecurityMode.Message)
    

Ange egenskapen ClientCredentialType

Om du anger läget till ett av de tre värdena avgör du hur du anger ClientCredentialType egenskapen. Om du till exempel använder WSHttpBinding-klassen och ställer in läget på Transport, måste du ange egenskapen ClientCredentialType för HttpTransportSecurity-klassen till ett lämpligt värde.

Så här anger du egenskapen ClientCredentialType för transportläge

  1. Skapa en instans av bindningen.

  2. Ange egenskapen Mode till Transport.

  3. Ange egenskapen ClientCredential till ett lämpligt värde. Följande kod anger egenskapen till Windows.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
    

Så här anger du egenskapen ClientCredentialType för meddelandeläge

  1. Skapa en instans av bindningen.

  2. Ange egenskapen Mode till Message.

  3. Ange egenskapen ClientCredential till ett lämpligt värde. Följande kod anger egenskapen till Certificate.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
    

Så här anger du egenskapen Mode och ClientCredentialType i konfigurationen

  1. Lägg till ett lämpligt bindningselement till <bindningselementen> i konfigurationsfilen. I följande exempel läggs ett <wsHttpBinding-element> till.

  2. Lägg till ett <binding> element och ange dess name attribut till ett lämpligt värde.

  3. Lägg till ett <security> element och ange mode attributet till Message, Transporteller TransportWithMessageCredential.

  4. Om läget är inställt på Transport, lägger du till ett <transport>-element och anger clientCredential-attributet till ett lämpligt värde.

    I följande exempel anges läget till "Transport"", och sedan anges attributet clientCredentialType för elementet <transport> till "Windows"".

    <wsHttpBinding>
    <binding name="TransportSecurity">
        <security mode="Transport" >
           <transport clientCredentialType = "Windows" />
        </security>
    </binding>
    </wsHttpBinding >
    

    Alternativt kan du ange security mode till "Message", följt av ett <"message"> element. Detta exempel ställer in clientCredentialType till "Certificate".

    <wsHttpBinding>
    <binding name="MessageSecurity">
        <security mode="Message" >
           <message clientCredentialType = "Certificate" />
        </security>
    </binding>
    </wsHttpBinding >
    

    Att använda värdet TransportWithMessageCredential är ett specialfall och förklaras nedan.

Använda TransportWithMessageCredential

När du ställer in säkerhetsläget på TransportWithMessageCredentialavgör transporten den faktiska mekanism som ger säkerhet på transportnivå. HTTP-protokollet använder till exempel SSL (Secure Sockets Layer) via HTTP (HTTPS). Därför ignoreras inställningen av egenskapen ClientCredentialType för alla transportsäkerhetsobjekt (till exempel HttpTransportSecurity). Med andra ord kan du bara ange ClientCredentialType meddelandets säkerhetsobjekt (för bindningen WSHttpBinding , NonDualMessageSecurityOverHttp objektet).

Mer information finns i Så här använder du autentiseringsuppgifter för transportsäkerhet och meddelande.

Se även