Ügyfelek védelme
A Windows Communication Foundationben (WCF) a szolgáltatás határozza meg az ügyfelek biztonsági követelményeit. Ez azt jelzi, hogy a szolgáltatás milyen biztonsági módot használ, és hogy az ügyfélnek meg kell-e adnia egy hitelesítő adatot. Az ügyfél biztonságossá tételének folyamata tehát egyszerű: használja a szolgáltatásból beszerzett metaadatokat (ha közzé van téve), és hozzon létre egy ügyfelet. A metaadatok határozzák meg az ügyfél konfigurálását. Ha a szolgáltatás megköveteli, hogy az ügyfél hitelesítő adatokat adjon meg, akkor olyan hitelesítő adatot kell beszereznie, amely megfelel a követelménynek. Ez a témakör részletesebben ismerteti a folyamatot. A biztonságos szolgáltatás létrehozásával kapcsolatos további információkért lásd: Securing Services.
A szolgáltatás megadja a biztonságot
A WCF-kötések alapértelmezés szerint engedélyezve vannak a biztonsági funkciókkal. (A kivétel a BasicHttpBinding.) Ezért ha a szolgáltatást a WCF használatával hozták létre, nagyobb az esély arra, hogy a hitelesítés, a bizalmasság és az integritás biztosítása érdekében a biztonságot implementálja. Ebben az esetben a szolgáltatás által biztosított metaadatok jelzik, hogy mire van szükség egy biztonságos kommunikációs csatorna létrehozásához. Ha a szolgáltatás metaadatai nem tartalmaznak biztonsági követelményeket, nem lehet olyan biztonsági sémát bevezetni, mint például a SECURE Sockets Layer (SSL) HTTP-n keresztül egy szolgáltatásra. Ha azonban a szolgáltatás megköveteli az ügyfél számára a hitelesítő adatok megadását, akkor az ügyfél fejlesztőjének, üzembe helyezőjének vagy rendszergazdájának meg kell adnia azt a hitelesítő adatot, amelyet az ügyfél a szolgáltatásban való hitelesítéshez használ.
Metaadatok beszerzése
Ügyfél létrehozásakor az első lépés a szolgáltatás metaadatainak lekérése, amellyel az ügyfél kommunikálni fog. Ez kétféleképpen végezhető el. Először is, ha a szolgáltatás közzétesz egy metaadat-exchange (MEX) végpontot, vagy ELérhetővé teszi a metaadatait HTTP-n vagy HTTPS-en keresztül, letöltheti a metaadatokat a ServiceModel Metadata segédprogrammal (Svcutil.exe), amely mindkét kódfájlt létrehozza egy ügyfélhez, valamint egy konfigurációs fájlt. (Az eszköz használatával kapcsolatos további információkért lásd: Szolgáltatások elérése WCF-ügyféllel.) Ha a szolgáltatás nem tesz közzé MEX-végpontot, és nem teszi elérhetővé a metaadatait HTTP-en vagy HTTPS-en keresztül, a biztonsági követelményeket és a metaadatokat leíró dokumentációért forduljon a szolgáltatás létrehozójához.
Fontos
Javasoljuk, hogy a metaadatok megbízható forrásból származzanak, és ne illetéktelenek legyenek. A HTTP-protokoll használatával lekért metaadatok világos szövegben lesznek elküldve, és módosíthatók. Ha a szolgáltatás a tulajdonságokat és HttpsGetUrl a HttpsGetEnabled tulajdonságokat használja, a szolgáltatás létrehozója által megadott URL-cím használatával töltse le az adatokat a HTTPS protokoll használatával.
A biztonság érvényesítése
A metaadat-források két széles kategóriára oszthatók: megbízhatósági forrásokra és nem megbízható forrásokra. Ha megbízik egy forrásban, és letöltötte az ügyfélkódot és az egyéb metaadatokat a forrás biztonságos MEX-végpontjáról, létrehozhatja az ügyfelet, megadhatja a megfelelő hitelesítő adatokat, és futtathatja más problémák nélkül.
Ha azonban úgy dönt, hogy letölt egy ügyfelet és metaadatokat egy olyan forrásból, amelyről keveset tud, győződjön meg arról, hogy ellenőrzi a kód által használt biztonsági intézkedéseket. Nem hozhat létre például olyan ügyfelet, amely személyes vagy pénzügyi adatait egy szolgáltatásnak küldi, kivéve, ha a szolgáltatás bizalmasságot és integritást igényel (legalábbis). Meg kell bíznia a szolgáltatás tulajdonosában olyan mértékben, hogy hajlandó közzétenni ezeket az információkat, mert ezek az információk láthatóak lesznek számukra.
Ezért ha nem megbízható forrásból származó kódot és metaadatokat használ, ellenőrizze a kódot és a metaadatokat, hogy megfeleljen a szükséges biztonsági szintnek.
Ügyfél hitelesítő adatainak beállítása
Az ügyfél hitelesítő adatainak beállítása az ügyfélen két lépésből áll:
Határozza meg a szolgáltatás által igényelt ügyfél-hitelesítőadat-típust . Ezt két módszer egyikével hajtja végre. Először is, ha rendelkezik a szolgáltatás létrehozójától származó dokumentációval, meg kell adnia a szolgáltatáshoz szükséges ügyfél-hitelesítő adatokat (ha vannak ilyenek). Másodszor, ha csak a Svcutil.exe eszköz által létrehozott konfigurációs fájllal rendelkezik, megvizsgálhatja az egyes kötéseket annak megállapításához, hogy milyen hitelesítő adattípusra van szükség.
Adjon meg egy tényleges ügyfél-hitelesítő adatot. A tényleges ügyfél-hitelesítő adatokat ügyfél-hitelesítő értéknek nevezzük, amely megkülönbözteti a típustól. Ha például az ügyfél hitelesítő adatainak típusa tanúsítványt ad meg, meg kell adnia egy X.509-tanúsítványt, amelyet a szolgáltatás megbízhatósági szolgáltatója állít ki.
Az ügyfél hitelesítő adatainak típusának meghatározása
Ha rendelkezik a Svcutil.exe eszköz által létrehozott konfigurációs fájllal, vizsgálja meg a <kötések szakaszt, és állapítsa> meg, hogy milyen ügyfél-hitelesítő adattípusra van szükség. A szakaszban a biztonsági követelményeket meghatározó kötési elemek találhatók. Vizsgálja meg az <egyes kötések biztonsági> elemét. Ez az elem tartalmazza az mode
attribútumot, amelyet három lehetséges érték (Message
vagy Transport
TransportWithMessageCredential
érték) egyikére állíthat be. Az attribútum értéke határozza meg a módot, és a mód határozza meg, hogy a gyermekelemek közül melyik lényeges.
Az <security>
elem tartalmazhat egy vagy <message>
több <transport>
elemet, vagy mindkettőt. A fontos elem az, amely megfelel a biztonsági módnak. Az alábbi kód például azt határozza meg, hogy a biztonsági mód, "Message"
és az elem ügyfél-hitelesítő adatainak <message>
típusa."Certificate"
Ebben az esetben az <transport>
elem figyelmen kívül hagyható. Az <message>
elem azonban azt határozza meg, hogy X.509-tanúsítványt kell megadni.
<wsHttpBinding>
<binding name="WSHttpBinding_ICalculator">
<security mode="Message">
<transport clientCredentialType="Windows"
realm="" />
<message clientCredentialType="Certificate"
negotiateServiceCredential="true"
algorithmSuite="Default"
establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
Vegye figyelembe, hogy ha az clientCredentialType
attribútum "Windows"
értéke az alábbi példában látható, akkor nem kell megadnia a tényleges hitelesítő értéket. Ennek az az oka, hogy a Windows integrált biztonsága biztosítja az ügyfelet futtató személy tényleges hitelesítő adatait (Kerberos-jogkivonatát).
<security mode="Message">
<transport clientCredentialType="Windows "
realm="" />
</security>
Az ügyfél hitelesítő adatainak beállítása
Ha úgy vélik, hogy az ügyfélnek meg kell adnia egy hitelesítő adatot, használja a megfelelő módszert az ügyfél konfigurálásához. Ügyféltanúsítvány beállításához például használja a metódust SetCertificate .
A hitelesítő adatok gyakori formája az X.509-tanúsítvány. A hitelesítő adatokat kétféleképpen adhatja meg:
- Az ügyfélkódban való programozással (a
SetCertificate
metódus használatával).
Ha hozzáadja <az ügyfél konfigurációs> fájljának viselkedési szakaszát, és használja az clientCredentials
elemet (alább látható).
Ügyfél-hitelesítő adatok> értékének <beállítása a Kódban
Az ügyfél hitelesítő adatainak> kódban való beállításához< hozzá kell férnie az ClientCredentials ClientBase<TChannel> osztály tulajdonságához. A tulajdonság egy ClientCredentials olyan objektumot ad vissza, amely lehetővé teszi a különböző hitelesítő adatokhoz való hozzáférést az alábbi táblázatban látható módon.
ClientCredential tulajdonság | Leírás | Jegyzetek |
---|---|---|
ClientCertificate | Egy X509CertificateInitiatorClientCredential | Az ügyfél által a szolgáltatásban való hitelesítéshez biztosított X.509-tanúsítványt jelöli. |
HttpDigest | Egy HttpDigestClientCredential | HTTP-kivonat hitelesítő adatokat jelöl. A hitelesítő adat a felhasználónév és a jelszó kivonata. |
IssuedToken | Egy IssuedTokenClientCredential | Egy biztonsági jogkivonat-szolgáltatás által kiadott egyéni biztonsági jogkivonatot jelöl, amelyet gyakran használnak összevonási forgatókönyvekben. |
Peer | Visszaadja a PeerCredential | Társ-hitelesítő adatokat jelöl egy Windows-tartomány társhálójában való részvételhez. |
ServiceCertificate | Egy X509CertificateRecipientClientCredential | A szolgáltatás által sávon kívüli egyeztetés során biztosított X.509-tanúsítványt jelöl. |
UserName | Visszaadja a UserNamePasswordClientCredential | Felhasználónevet és jelszópárt jelöl. |
Windows | Visszaadja a WindowsClientCredential | Windows-ügyfél hitelesítő adatait (Kerberos-hitelesítő adatokat) jelöl. Az osztály tulajdonságai írásvédettek. |
Ügyfél-hitelesítő adatok> értékének <beállítása a konfigurációban
A hitelesítő adatok értékeit egy végponti viselkedés használatával adhatók meg az <ügyfél hitelesítő adatai> elem gyermekelemeiként. A használt elem az ügyfél hitelesítő adatainak típusától függ. Az alábbi példa például azt a konfigurációt mutatja be, amely egy X.509-tanúsítványt állít be a <<clientCertificate> használatával.
<configuration>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="myEndpointBehavior">
<clientCredentials>
<clientCertificate findvalue="myMachineName"
storeLocation="Current" X509FindType="FindBySubjectName" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Az ügyfél hitelesítő adatainak konfigurációban való beállításához adjon hozzá egy <endpointBehaviors> elemet a konfigurációs fájlhoz. Emellett a hozzáadott viselkedési elemet a szolgáltatás végpontjával kell összekapcsolni az behaviorConfiguration
<ügyfélelem> végpontjának> attribútumával<, ahogyan az az alábbi példában látható. Az attribútum értékének behaviorConfiguration
meg kell egyeznie a viselkedési name
attribútum értékével.
<configuration>
<system.serviceModel>
<client>
<endpoint address="http://localhost/servicemodelsamples/service.svc"
binding="wsHttpBinding"
bindingConfiguration="Binding1"
behaviorConfiguration="myEndpointBehavior"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</client>
</system.serviceModel>
</configuration>
Feljegyzés
Az ügyfél hitelesítő adatainak egy része nem állítható be alkalmazáskonfigurációs fájlokkal, például felhasználónévvel és jelszóval, illetve Windows-felhasználó- és jelszóértékekkel. Ezek a hitelesítő adatok csak kódban adhatók meg.
Az ügyfél hitelesítő adatainak beállításáról további információt az Ügyfél hitelesítő adatainak megadása című témakörben talál.
Feljegyzés
ClientCredentialType
a rendszer figyelmen kívül hagyja, amikor SecurityMode
a "TransportWithMessageCredential"
beállítás értéke az alábbi mintakonfigurációban látható.
<wsHttpBinding>
<binding name="PingBinding">
<security mode="TransportWithMessageCredential" >
<message clientCredentialType="UserName"
establishSecurityContext="false"
negotiateServiceCredential="false" />
<transport clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
Lásd még
- ClientCredentials
- ClientBase<TChannel>
- ClientCredentials
- HttpsGetEnabled
- HttpsGetUrl
- <Kötések>
- Konfigurációszerkesztő eszköz (SvcConfigEditor.exe)
- Szolgáltatások biztonságossá tétele
- Szolgáltatások elérése WCF-ügyféllel
- Útmutató: Ügyfél hitelesítő adatainak megadása
- ServiceModel Metadata Segédprogram (Svcutil.exe)
- Útmutató: Adja meg az ügyfél hitelesítő adatait