WS-transport met berichtreferentie
In dit voorbeeld ziet u hoe SSL-transportbeveiliging wordt gebruikt in combinatie met clientreferenties die in het bericht worden uitgevoerd. In dit voorbeeld wordt de wsHttpBinding
binding gebruikt.
De binding biedt standaard wsHttpBinding
HTTP-communicatie. Wanneer deze is geconfigureerd voor transportbeveiliging, ondersteunt de binding HTTPS-communicatie. HTTPS biedt vertrouwelijkheids- en integriteitsbescherming voor de berichten die via de kabel worden verzonden. De set verificatiemechanismen die kunnen worden gebruikt om de client te verifiëren bij de service, is echter beperkt tot wat het HTTPS-transport ondersteunt. Windows Communication Foundation (WCF) biedt een TransportWithMessageCredential
beveiligingsmodus die is ontworpen om deze beperking te overwinnen. Wanneer deze beveiligingsmodus is geconfigureerd, wordt de transportbeveiliging gebruikt om vertrouwelijkheid en integriteit te bieden voor de verzonden berichten en om de serviceverificatie uit te voeren. De clientverificatie wordt echter uitgevoerd door de clientreferentie rechtstreeks in het bericht te plaatsen. Hiermee kunt u elk referentietype gebruiken dat wordt ondersteund door de berichtbeveiligingsmodus voor de clientverificatie en tegelijkertijd het prestatievoordeel van de transportbeveiligingsmodus behouden.
In dit voorbeeld wordt een UserName
referentietype gebruikt om de client te verifiëren bij de service.
Dit voorbeeld is gebaseerd op de Aan de slag die een rekenmachineservice implementeert. De wsHttpBinding
binding wordt opgegeven en geconfigureerd in de toepassingsconfiguratiebestanden voor de client en service.
Notitie
De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.
De programmacode in het voorbeeld is bijna identiek aan die van de Aan de slag-service . Er is één extra bewerking geleverd door het servicecontract - GetCallerIdentity
. Deze bewerking retourneert de naam van de identiteit van de beller naar de beller.
public string GetCallerIdentity()
{
// Use ServiceSecurityContext.WindowsIdentity to get the name of the caller.
return ServiceSecurityContext.Current.WindowsIdentity.Name;
}
U moet een certificaat maken en toewijzen met behulp van de wizard Webservercertificaat voordat u het voorbeeld bouwt en uitvoert. De eindpuntdefinitie en bindingsdefinitie in de configuratiebestandsinstellingen schakelen TransportWithMessageCredential
de beveiligingsmodus in, zoals wordt weergegeven in de volgende voorbeeldconfiguratie voor de client.
<system.serviceModel>
<client>
<endpoint name=""
address="https://localhost/servicemodelsamples/service.svc"
binding="wsHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</client>
<bindings>
<wsHttpBinding>
<!--
This configuration defines the security mode as TransportWithMessageCredential.
and the clientCredentialType as UserName.
-->
<binding name="Binding1">
<security mode ="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
Het opgegeven adres maakt gebruik van het https://
schema. De bindingsconfiguratie stelt de beveiligingsmodus in op TransportWithMessageCredential
. Dezelfde beveiligingsmodus moet worden opgegeven in het web.config-bestand van de service.
Omdat het certificaat dat in dit voorbeeld wordt gebruikt, een testcertificaat is dat is gemaakt met Makecert.exe, wordt er een beveiligingswaarschuwing weergegeven wanneer u probeert toegang te krijgen tot een https: adres, zoals https://localhost/servicemodelsamples/service.svc
, vanuit uw browser. Om ervoor te zorgen dat de WCF-client met een testcertificaat kan werken, is er extra code toegevoegd aan de client om de beveiligingswaarschuwing te onderdrukken. Deze code en de bijbehorende klasse zijn niet vereist bij het gebruik van productiecertificaten.
// WARNING: This code is only needed for test certificates such as those created by makecert. It is
// not recommended for production code.
PermissiveCertificatePolicy.Enact("CN=ServiceModelSamples-HTTPS-Server");
Wanneer u het voorbeeld uitvoert, worden de bewerkingsaanvragen en -antwoorden weergegeven in het clientconsolevenster. Druk op Enter in het clientvenster om de client af te sluiten.
Username authentication required.
Provide a valid machine or domain account. [domain\\user]
Enter username:
YourDomainName\YourAccountName
Enter password:
********
YourDomainName\YourAccountName
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
Het voorbeeld instellen, compileren en uitvoeren
Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
Zorg ervoor dat u de installatie-instructies voor iis-servercertificaten (Internet Information Services) hebt uitgevoerd.
Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.
Als u het voorbeeld wilt uitvoeren in een configuratie met één of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.