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
Skapa en instans av bindningsklassen som du använder. En lista över fördefinierade bindningar finns i System-Provided Bindings (System-Provided Bindings). I det här exemplet skapas en instans av WSHttpBinding klassen.
Ange egenskapen för
Mode
objektet som returneras avSecurity
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 till 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 ange läget för att transportera med meddelandeautentiseringsuppgifter, 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
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 innebär det att Transport
du måste ange ClientCredentialType egenskapen HttpTransportSecurity för klassen till ett lämpligt värde.
Så här anger du egenskapen ClientCredentialType för transportläge
Skapa en instans av bindningen.
Ange egenskapen
Mode
tillTransport
.Ange egenskapen
ClientCredential
till ett lämpligt värde. Följande kod anger egenskapen tillWindows
.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
Skapa en instans av bindningen.
Ange egenskapen
Mode
tillMessage
.Ange egenskapen
ClientCredential
till ett lämpligt värde. Följande kod anger egenskapen tillCertificate
.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
Lägg till ett lämpligt bindningselement i <bindningselementet> i konfigurationsfilen. I följande exempel läggs ett <wsHttpBinding-element> till.
Lägg till ett
<binding>
element och ange dessname
attribut till ett lämpligt värde.Lägg till ett
<security>
element och angemode
attributet tillMessage
,Transport
ellerTransportWithMessageCredential
.Om läget är inställt på lägger du till
Transport
ett<transport>
element och angerclientCredential
attributet till ett lämpligt värde.I följande exempel anges läget till "
Transport"
, och attributet för elementet<transport>
angesclientCredentialType
sedan 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. Det här exemplet angerclientCredentialType
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å TransportWithMessageCredential
avgö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 för ClientCredentialType
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.