Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tato ukázka ukazuje, jak implementovat aplikaci, která používá WS-Security s ověřováním uživatelského jména pro klienta a vyžaduje ověření serveru pomocí certifikátu X.509v3 serveru. Všechny zprávy aplikace mezi klientem a serverem jsou podepsané a šifrované. Ve výchozím nastavení se uživatelské jméno a heslo zadané klientem používají k přihlášení k platnému účtu Systému Windows. Tato ukázka je založená na WSHttpBindingu. Tato ukázka se skládá z programu konzoly klienta (Client.exe) a knihovny služeb (Service.dll) hostované službou IIS (Internet Information Services). Služba implementuje kontrakt, který definuje komunikační vzor žádosti a odpovědi.
Poznámka:
Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.
Tato ukázka také ukazuje:
Výchozí mapování na účty Systému Windows umožňuje provedení další autorizace.
Přístup k informacím o identitě volajícího z kódu služby
Služba zveřejňuje jeden koncový bod pro komunikaci se službou, která je definována pomocí konfiguračního souboru Web.config. Koncový bod se skládá z adresy, vazby a kontraktu. Vazba je nakonfigurována se standardním <wsHttpBinding>, který ve výchozím nastavení používá zabezpečení zpráv. Tato ukázka nastaví standardní <wsHttpBinding> tak, aby používala ověřování pomocí uživatelského jména klienta. Chování určuje, že se přihlašovací údaje uživatele použijí k ověřování služby. Certifikát serveru musí obsahovat stejnou hodnotu pro název subjektu jako findValue atribut v <serviceCredentials>.
<system.serviceModel>
<protocolMapping>
<add scheme="http" binding="wsHttpBinding" />
</protocolMapping>
<bindings>
<wsHttpBinding>
<!--
This configuration defines the security mode as Message and
the clientCredentialType as Username.
By default, Username authentication attempts to authenticate the provided
username as a Windows computer or domain account.
-->
<binding>
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true.-->
<behaviors>
<serviceBehaviors>
<behavior>
<!--
The serviceCredentials behavior allows one to define a service certificate.
A service certificate is used by the service to authenticate itself to the client and to provide message protection.
This configuration references the "localhost" certificate installed during the setup instructions.
-->
<serviceCredentials>
<serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
</serviceCredentials>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Konfigurace koncového bodu klienta se skládá z absolutní adresy koncového bodu služby, vazby a kontraktu. Konfigurace vazby klienta obsahuje odpovídající securityMode a authenticationMode. Při spuštění ve scénáři mezi počítači je potřeba odpovídajícím způsobem změnit adresu koncového bodu služby.
<system.serviceModel>
<client>
<endpoint address="http://localhost/servicemodelsamples/service.svc"
binding="wsHttpBinding"
bindingConfiguration="Binding1"
behaviorConfiguration="ClientCredentialsBehavior"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</client>
<bindings>
<wsHttpBinding>
<!--
This configuration defines the security mode as Message and
the clientCredentialType as Username.
-->
<binding name="Binding1">
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true.-->
<behaviors>
<endpointBehaviors>
<behavior name="ClientCredentialsBehavior">
<!--
Setting the certificateValidationMode to PeerOrChainTrust means that if the certificate
is in the user's Trusted People store, then it is trusted without performing a
validation of the certificate's issuer chain. This setting is used here for convenience so that the
sample can be run without having to have certificates issued by a certification authority (CA).
This setting is less secure than the default, ChainTrust. The security implications of this
setting should be carefully considered before using PeerOrChainTrust in production code.
-->
<clientCredentials>
<serviceCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Implementace klienta nastaví uživatelské jméno a heslo, které se má použít.
// Create a client.
CalculatorClient client = new CalculatorClient();
// Configure client with valid computer or domain account (username,password).
client.ClientCredentials.UserName.UserName = username;
client.ClientCredentials.UserName.Password = password.ToString();
// Call GetCallerIdentity service operation.
Console.WriteLine(client.GetCallerIdentity());
...
//Closing the client gracefully closes the connection and cleans up resources.
client.Close();
Při spuštění ukázky se požadavky na operace a odpovědi zobrazí v okně konzoly klienta. Stisknutím klávesy ENTER v okně klienta klienta ukončete klienta.
MyMachine\TestAccount
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.
Dávkový soubor Setup.bat, který je součástí ukázek MessageSecurity, umožňuje nakonfigurovat server s příslušným certifikátem pro spuštění hostované aplikace, která vyžaduje zabezpečení založené na certifikátech. Dávkový soubor lze spustit ve dvou režimech. Chcete-li spustit dávkový soubor v režimu jednoho počítače, zadejte setup.bat na příkazovém řádku. Chcete-li spustit v režimu služby, zadejte setup.bat service. Tento režim použijete při spuštění ukázky na různých počítačích. Podrobnosti najdete v postupu nastavení na konci tohoto tématu.
Níže najdete stručný přehled různých částí dávkových souborů.
Vytvoření certifikátu serveru
Následující řádky z dávkového souboru Setup.bat vytvoří certifikát serveru, který se má použít.
echo ************ echo Server cert setup starting echo %SERVER_NAME% echo ************ echo making server cert echo ************ makecert.exe -sr LocalMachine -ss MY -a sha1 -n CN=%SERVER_NAME% -sky exchange -peProměnná %SERVER_NAME% určuje název serveru. Certifikát je uložen v úložišti LocalMachine. Pokud se dávkový soubor Setup.bat spustí s argumentem služby (například
setup.bat service) %SERVER_NAME% obsahuje plně kvalifikovaný název domény počítače. Jinak se výchozí hodnota nastaví na localhost.Instalace certifikátu serveru do důvěryhodného úložiště certifikátů klienta
Následující řádek zkopíruje certifikát serveru do úložiště důvěryhodných osob klienta. Tento krok je povinný, protože certifikáty generované Makecert.exe nejsou implicitně důvěryhodné klientským systémem. Pokud už máte certifikát, který je kořenový v kořenovém certifikátu klienta ( například certifikát vydaný Microsoftem), tento krok naplnění úložiště klientských certifikátů certifikátem pomocí certifikátu serveru se nevyžaduje.
certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeopleUdělení oprávnění k privátnímu klíči certifikátu
Následující řádky v dávkovém souboru Setup.bat vytvoří certifikát serveru uložený v úložišti LocalMachine přístupný pro účet pracovního procesu ASP.NET.
echo ************ echo setting privileges on server certificates echo ************ for /F "delims=" %%i in ('"%ProgramFiles%\ServiceModelSampleTools\FindPrivateKey.exe" My LocalMachine -n CN^=%SERVER_NAME% -a') do set PRIVATE_KEY_FILE=%%i set WP_ACCOUNT=NT AUTHORITY\NETWORK SERVICE (ver | findstr /C:"5.1") && set WP_ACCOUNT=%COMPUTERNAME%\ASPNET echo Y|cacls.exe "%PRIVATE_KEY_FILE%" /E /G "%WP_ACCOUNT%":R iisresetPoznámka:
Pokud používáte anglickou edici Windows, která není určena pro USA, musíte upravit soubor Setup.bat a nahradit
NT AUTHORITY\NETWORK SERVICEnázev účtu místním ekvivalentem.
Jak nastavit, sestavit a spustit ukázku
Ujistěte se, že jste provedli instalační proceduru One-Time pro ukázky Windows Communication Foundation.
Pokud chcete sestavit verzi C# nebo Visual Basic .NET řešení, postupujte podle pokynů v Sestavení ukázek Windows Communication Foundation.
Spustit ukázku na stejném počítači
Ujistěte se, že cesta obsahuje složku, ve které jsou umístěné Makecert.exe a FindPrivateKey.exe.
Spusťte Setup.bat z ukázkové instalační složky v příkazovém řádku pro vývojáře pro Visual Studio otevřené s oprávněními správce. Tím se nainstalují všechny certifikáty potřebné pro spuštění ukázky.
Poznámka:
Dávkový soubor Setup.bat je určený ke spuštění z příkazového řádku pro vývojáře pro Visual Studio. Vyžaduje, aby proměnná prostředí PATH ukazovala na adresář, ve kterém je nainstalovaná sada SDK. Tato proměnná prostředí se automaticky nastaví v rámci příkazového řádku vývojáře ve Visual Studio.
Zadáním adresy
http://localhost/servicemodelsamples/service.svcověřte přístup ke službě pomocí prohlížeče.Spusťte Client.exe z \client\bin. Aktivita klienta se zobrazí v aplikaci konzoly klienta.
Pokud klient a služba nemůžou komunikovat, přečtěte si Tipy pro řešení potíží v ukázkách WCF.
Spustit ukázku na více počítačích
Vytvořte adresář na počítači služby. Pomocí nástroje pro správu internetové informační služby vytvořte virtuální aplikaci s názvem servicemodelsamples pro tento adresář.
Zkopírujte soubory programu služby z \inetpub\wwwroot\servicemodelsamples do virtuálního adresáře v počítači služby. Ujistěte se, že kopírujete soubory v podadresáři \bin. Zkopírujte také soubory Setup.bat a Cleanup.bat do počítače služby.
Vytvořte adresář v klientském počítači pro binární soubory klienta.
Zkopírujte soubory klientského programu do klientského adresáře v klientském počítači. Zkopírujte také soubory Setup.bat, Cleanup.bata ImportServiceCert.bat do klienta.
Na serveru spusťte
setup.bat servicepříkazový řádek pro vývojáře pro Visual Studio otevřený s oprávněními správce. Spuštěnísetup.bats argumentemservicevytvoří certifikát služby s plně kvalifikovaným názvem domény počítače a exportuje certifikát služby do souboru s názvem Service.cer.Upravte Web.config tak, aby odrážel nový název certifikátu (v atributu findValue v elementu serviceCertificate), který je stejný jako plně kvalifikovaný název domény počítače.
.Zkopírujte soubor Service.cer z adresáře služby do klientského adresáře v klientském počítači.
V souboru Client.exe.config na klientském počítači změňte hodnotu adresy koncového bodu tak, aby odpovídala nové adrese vaší služby.
Na klientovi spusťte ImportServiceCert.bat v příkazovém řádku pro vývojáře pro Visual Studio otevřené s oprávněními správce. Tím se certifikát služby naimportuje ze souboru Service.cer do úložiště CurrentUser – TrustedPeople.
Na klientském počítači spusťte Client.exe z příkazového řádku. Pokud klient a služba nemůžou komunikovat, přečtěte si Tipy pro řešení potíží v ukázkách WCF.
Úklid po vzorku
Po dokončení spuštění ukázky spusťte Cleanup.bat ve složce s ukázkami.
Poznámka:
Tento skript při spuštění této ukázky na různých počítačích neodebere služební certifikáty na klientovi. Pokud jste spustili ukázky wcf (Windows Communication Foundation), které používají certifikáty napříč počítači, nezapomeňte vymazat certifikáty služby nainstalované v úložišti CurrentUser – TrustedPeople. K tomu použijte následující příkaz:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>Například:certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.