Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A MessageSecurity minta bemutatja, hogyan implementálhat egy olyan alkalmazást, amely az basicHttpBinding üzenetbiztonságot használja. Ez a minta a számológép szolgáltatást megvalósító Első lépések részen alapul.
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.
A biztonsági mód basicHttpBinding a következő értékekre állítható be: Message, Transport, TransportWithMessageCredentialTransportCredentialOnly és None. A következő mintaszolgáltatás App.config fájlban a végpontdefiníció meghatározza a basicHttpBinding végpontot, és hivatkozik egy Binding1 nevű kötéskonfigurációra, ahogyan az a következő mintakonfigurációban látható.
<system.serviceModel>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- This endpoint is exposed at the base address provided by -->
<!-- host: http://localhost:8000/ServiceModelSamples/service.-->
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</service>
</services>
...
</system.serviceModel>
A kötéskonfiguráció beállítja a mode< attribútumát a > értékre, és az Message attribútumát a clientCredentialType értékre, ahogyan az alábbi mintakonfigurációban látható.
<bindings>
<basicHttpBinding>
<!--
This configuration defines the SecurityMode as Message and
the clientCredentialType as Certificate.
-->
<binding name="Binding1" >
<security mode = "Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
A szolgáltatás által az ügyfél felé történő hitelesítéshez használt tanúsítvány az elem alatti serviceCredentials konfigurációs fájl viselkedési szakaszában van beállítva. Az ügyfél által a szolgáltatásban való hitelesítéshez használt tanúsítványra vonatkozó érvényesítési mód az elem viselkedési szakaszában clientCertificate is be van állítva.
<!--For debugging purposes, set the includeExceptionDetailInFaults attribute to true.-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
<!--The serviceCredentials behavior allows one to define a -->
<!--service certificate. A service certificate is used by a -->
<!--client to authenticate the service and provide message -->
<!-- protection. This configuration references the "localhost"-->
<!--certificate installed during the setup instructions. -->
<serviceCredentials>
<serviceCertificate findValue="localhost"
storeLocation="LocalMachine"
storeName="My" x509FindType="FindBySubjectName" />
<clientCertificate>
<!-- 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. -->
<authentication
certificateValidationMode="PeerOrChainTrust" />
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
Ugyanazokat a kötési és biztonsági adatokat adja meg az ügyfélkonfigurációs fájl.
A hívó identitása a következő kóddal jelenik meg a szolgáltatáskonzol ablakában:
Console.WriteLine("Called by {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);
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.
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 minta beállítása és létrehozá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 gépen
A Setup.bat futtatása a minta telepítési mappából. 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 van kialakítva, hogy windowsos SDK parancssorból fusson. Ehhez az MSSDK környezeti változónak arra a könyvtárra kell mutatnia, amelyben az SDK telepítve van. Ez a környezeti változó automatikusan be van állítva egy Windows SDK parancssorban.
Futtassa a szolgáltatásalkalmazást a \service\bin fájlból.
Futtassa az ügyfélalkalmazást a \client\bin könyvtárbó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.
Távolítsa el a tanúsítványokat a Cleanup.bat futtatásával, amikor befejezte a mintát. Más biztonsági minták ugyanazokat a tanúsítványokat használják.
A minta futtatása gépeken
Hozzon létre egy címtárat a szolgáltatásgépen a szolgáltatás bináris fájljaihoz.
Másolja a szolgáltatásprogram fájljait a kiszolgáló szolgáltatáskönyvtárába. Másolja a Setup.bat, Cleanup.batés ImportClientCert.bat fájlokat is a kiszolgálóra.
Hozzon létre egy könyvtárat az ügyfélgépen az ügyfél bináris fájljaihoz.
Másolja az ügyfélprogram fájljait az ügyfélgép ügyfélkönyvtárába. Másolja a Setup.bat, Cleanup.batés ImportServiceCert.bat fájlokat is az ügyfélbe.
Futtassa a
setup.bat servicea kiszolgálón. Asetup.batprogramot aserviceargumentummal futtatva létrehoz egy szolgáltatástanúsítványt a gép teljesen minősített tartománynevével, és exportálja azt egy Service.cer nevű fájlba.Szerkessze a Service.exe.config-t úgy, hogy tükrözze az új tanúsítványnevet (amely a
findValueattribútumban található a <serviceCertificate> elemnél), és amely megegyezik a gép teljes minősített tartománynevével. Módosítsa az alapcím értékét úgy is, hogy a localhost helyett teljes gépnevet adjon meg.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.
Kliens oldalon futtassa a
setup.bat client. Asetup.batargumentummal futtatottclientlétrehoz egy client.com nevű ügyféltanúsítványt, és exportálja az ügyféltanúsítványt egy Client.cer nevű fájlba.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. Ezt úgy teheti meg, hogy lecseréli a localhostot a kiszolgáló teljesen minősített tartománynevére. Módosítsa az
findValue<alapértelmezett tanúsítvány attribútumot> az új szolgáltatástanúsítvány nevére is, amely a kiszolgáló teljesen minősített tartományneve.Másolja a Client.cer fájlt az ügyfélkönyvtárból a kiszolgáló szolgáltatáskönyvtárába.
Az ügyfélen futtassa a ImportServiceCert.bat. Ez importálja a szolgáltatástanúsítványt a Service.cer fájlból a CurrentUser – TrustedPeople tárolóba.
A kiszolgálón futtassa a ImportClientCert.bat, Ez importálja az ügyféltanúsítványt a Client.cer fájlból a LocalMachine – TrustedPeople tárolóba.
A szolgáltatási gépen futtassa a Service.exe parancsot parancssorból.
Az ügyfélszámítógépen indítsa el a Client.exe egy parancssori ablakbó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
A minta végrehajtása után futtassa le a mintamappában lévő Cleanup.bat-t.
Megjegyzés:
Ez a szkript nem távolítja el a szolgáltatástanúsítványokat az ügyfélen, amikor a mintát gépeken futtatja. Ha windowsos kommunikációs alap (WCF) mintákat futtat, amelyek különböző gépeken használnak tanúsítványokat, 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