Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a minta bemutatja, hogyan implementálható egy olyan alkalmazás, amely WS-Security használ az ügyfél felhasználónév-hitelesítésével, és a kiszolgáló X.509v3 tanúsítványával igényel kiszolgálói hitelesítést. Az ügyfél és a kiszolgáló közötti összes alkalmazásüzenet aláírt és titkosított. Alapértelmezés szerint az ügyfél által megadott felhasználónévvel és jelszóval lehet bejelentkezni egy érvényes Windows-fiókba. Ez a minta a WSHttpBindingen alapul. Ez a minta egy ügyfélkonzolprogramból (Client.exe) és az Internet Information Services (IIS) által üzemeltetett szolgáltatáskódtárból (Service.dll) áll. A szolgáltatás megvalósít egy szerződést, amely egy kérés-válasz kommunikációs mintát határoz meg.
Megjegyzés:
A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.
Ez a minta a következőket is bemutatja:
Az alapértelmezett megfeleltetés Windows-fiókokhoz, hogy további engedélyezést lehessen végezni.
A hívó identitásadatainak elérése a szolgáltatáskódból.
A szolgáltatás egyetlen végpontot tesz elérhetővé a szolgáltatással való kommunikációhoz, amely a Web.configkonfigurációs fájllal van definiálva. A végpont egy címből, egy kötésből és egy szerződésből áll. A kötés egy szabványos <wsHttpBindinggel> van konfigurálva, amely alapértelmezés szerint az üzenetbiztonságot használja. Ez a minta beállítja a standard <wsHttpBindinget> az ügyfél-felhasználónév-hitelesítés használatára. A viselkedés azt határozza meg, hogy a felhasználói hitelesítő adatokat a szolgáltatáshitelesítéshez kell használni. A kiszolgálótanúsítványnak ugyanazt az értéket kell tartalmaznia a tárgynévhez, mint a findValue<szolgáltatás hitelesítő adatok> attribútuma.
<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>
Az ügyfélvégpont konfigurációja a szolgáltatásvégpont, a kötés és a szerződés abszolút címéből áll. A klienskapcsolat megfelelő securityMode és authenticationMode konfigurációval van ellátva. Számítógépközi forgatókönyv esetén a szolgáltatásvégpont címét ennek megfelelően módosítani kell.
<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>
Az ügyfél implementációja beállítja a használni kívánt felhasználónevet és jelszó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();
A minta futtatásakor a műveleti kérelmek és a válaszok megjelennek az ügyfélkonzol ablakában. Nyomja le az ENTER billentyűt az ügyfélablakban az ügyfél leállításához.
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.
A MessageSecurity-mintákhoz mellékelt Setup.bat kötegfájl lehetővé teszi a kiszolgáló megfelelő tanúsítvánnyal való konfigurálását egy olyan üzemeltetett alkalmazás futtatásához, amely tanúsítványalapú biztonságot igényel. A kötegfájl két módban futtatható. Ha egyszámítógépes módban szeretné futtatni a kötegfájlt, írja be setup.bat a parancssorba. A szolgáltatás módban való futtatásához írja be a következőt setup.bat service: Ezt a módot akkor használja, ha a mintaprogramot számítógépeken futtatja. A részletekért tekintse meg a témakör végén található beállítási eljárást.
Az alábbiakban röviden áttekintheti a kötegfájlok különböző szakaszait.
A kiszolgálótanúsítvány létrehozása
A Setup.bat kötegfájl alábbi sorai hozzák létre a használni kívánt kiszolgálótanúsítványt.
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 -peA %SERVER_NAME% változó megadja a kiszolgáló nevét. A tanúsítvány tárolása a LocalMachine áruházban történik. Ha a Setup.bat kötegfájl egy szolgáltatás argumentumával (például
setup.bat service) fut, a %SERVER_NAME% tartalmazza a számítógép teljes tartománynevét. Ellenkező esetben alapértelmezés szerint a localhost lesz.A kiszolgálótanúsítvány telepítése az ügyfél megbízható tanúsítványtárolójába
Az alábbi sor a kiszolgálótanúsítványt az ügyfél megbízható személyek tárolójába másolja. Erre a lépésre azért van szükség, mert a Makecert.exe által létrehozott tanúsítványokat az ügyfélrendszer nem implicit módon megbízhatónak minősíti. Ha már rendelkezik olyan tanúsítvánnyal, amely egy ügyfél megbízható főtanúsítványában gyökerezik – például egy Microsoft által kiadott tanúsítványban –, nem szükséges az ügyféltanúsítvány-tároló kiszolgálótanúsítvánnyal való feltöltésének ez a lépése.
certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeopleEngedélyek megadása a tanúsítvány titkos kulcsához
A Setup.bat kötegfájl alábbi sorai elérhetővé teszik a LocalMachine tárolóban tárolt kiszolgálói tanúsítványt a ASP.NET feldolgozói folyamat fiókjához.
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 iisresetMegjegyzés:
Ha a Windows nem amerikai angol kiadását használja, szerkesztenie kell a Setup.bat fájlt, és le kell cserélnie a
NT AUTHORITY\NETWORK SERVICEfiók nevét a regionális megfelelőre.
A példa beállítása, elkészítése és futtatása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time beállítási eljárását.
A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse Windows Communication Foundation-mintákcímű témakör utasításait.
A minta futtatása ugyanazon a számítógépen
Győződjön meg arról, hogy az elérési út tartalmazza azt a mappát, amelyben Makecert.exe és FindPrivateKey.exe találhatók.
Futtassa a Setup.bat a minta telepítési mappából egy rendszergazdai jogosultságokkal megnyitott Visual Studio fejlesztői parancssorában. Ez telepíti a minta futtatásához szükséges összes tanúsítványt.
Megjegyzés:
A Setup.bat kötegfájl úgy lett kialakítva, hogy a Visual Studióhoz készült fejlesztői parancssorból fusson. Megköveteli, hogy az elérési út környezeti változója arra a könyvtárra mutasson, amelyben az SDK telepítve van. Ez a környezeti változó automatikusan be van állítva a Visual Studio fejlesztői parancssorában.
Ellenőrizze a szolgáltatáshoz való hozzáférést egy böngészőben a cím
http://localhost/servicemodelsamples/service.svcmegadásával.Indítsa el a Client.exe a \client\bin fájlból. Az ügyféltevékenység megjelenik az ügyfélkonzol-alkalmazásban.
Ha az ügyfél és a szolgáltatás nem tud kommunikálni, tekintse meg a WCF minták hibaelhárítási tippeket a éscímsorok alatt.
A minta futtatása számítógépeken
Hozzon létre egy könyvtárat a szolgáltatásszámítógépen. Hozzon létre egy servicemodelsamples nevű virtuális alkalmazást ehhez a könyvtárhoz az Internet Information Services felügyeleti eszközével.
Másolja a szolgáltatásprogram fájljait az \inetpub\wwwroot\servicemodelsamples fájlból a szolgáltatásszámítógép virtuális könyvtárába. Győződjön meg arról, hogy a \bin alkönyvtárban lévő fájlokat másolja. Másolja a Setup.bat és Cleanup.bat fájlokat is a szolgáltatásszámítógépre.
Hozzon létre egy könyvtárat az ügyfélszámítógépen az ügyfél bináris fájljaihoz.
Másolja az ügyfélprogram fájljait az ügyfélszámítógép ügyfélkönyvtárába. Másolja a Setup.bat, Cleanup.batés ImportServiceCert.bat fájlokat is az ügyfélbe.
Futtassa
setup.bat servicea kiszolgálón a Visual Studio fejlesztői parancssorában, amely rendszergazdai jogosultságokkal van megnyitva. Asetup.batargumentummal futtatottservicelétrehoz egy szolgáltatástanúsítványt a számítógép teljes tartománynevével, és exportálja a szolgáltatástanúsítványt egy Service.cer nevű fájlba.Szerkessze Web.config-t úgy, hogy az új tanúsítványnevet tükrözze (a serviceCertificate elem findValue attribútumában), amely a számítógép teljes körű domain nevével azonos.
Másolja a Service.cer fájlt a szolgáltatáskönyvtárból az ügyfélszámítógép ügyfélkönyvtárába.
Az ügyfélszámítógép Client.exe.config fájljában módosítsa a végpont címértékét úgy, hogy az megfeleljen a szolgáltatás új címének.
Az ügyfélen futtassa a ImportServiceCert.bat egy rendszergazdai jogosultságokkal megnyitott Visual Studio fejlesztői parancssorában. Ez importálja a szolgáltatástanúsítványt a Service.cer fájlból a CurrentUser – TrustedPeople tárolóba.
Az ügyfélszámítógépen indítsa el a Client.exe parancssorból. Ha az ügyfél és a szolgáltatás nem tud kommunikálni, tekintse meg a WCF minták hibaelhárítási tippeket a éscímsorok alatt.
A minta utáni tisztítás
Miután befejezte a minta futtatását, futtassa a Cleanup.bat-t a mintamappában.
Megjegyzés:
Ez a szkript nem távolítja el az ügyfél szolgáltatástanúsítványait, amikor a mintát számítógépeken futtatja. Ha windowsos kommunikációs alap (WCF) mintákat futtat, amelyek tanúsítványokat használnak a számítógépeken, mindenképpen törölje a CurrentUser – TrustedPeople áruházban telepített szolgáltatástanúsítványokat. Ehhez használja a következő parancsot:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>Például:certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.