Megosztás a következőn keresztül:


Biztonsági viselkedések a WCF-ben

A Windows Communication Foundationben (WCF) a viselkedések szolgáltatásszinten vagy végpontszinten módosítják a futásidejű viselkedést. (A viselkedésekkel kapcsolatos további információkért lásd: Szolgáltatás futásidejű viselkedésének megadása.) A biztonsági viselkedés lehetővé teszi a hitelesítő adatok, a hitelesítés, az engedélyezés és a naplózási naplók ellenőrzését. A viselkedéseket programozással vagy konfigurációval is használhatja. Ez a témakör a következő, biztonsági függvényekkel kapcsolatos viselkedés konfigurálásával foglalkozik:

Hitelesítő adatok beállítása viselkedéssel

<A szolgáltatás hitelesítő adataival> és <ügyfél-hitelesítő adataival> állíthat be hitelesítő adatokat egy szolgáltatáshoz vagy ügyfélhez. A mögöttes kötési konfiguráció határozza meg, hogy be kell-e állítani egy hitelesítő adatot. Ha például a biztonsági mód értéke be van állítva None, akkor az ügyfelek és a szolgáltatások nem hitelesítik egymást, és semmilyen típusú hitelesítő adatot nem igényelnek.

Másrészt a szolgáltatáskötéshez ügyfél-hitelesítő adattípusra is szükség lehet. Ebben az esetben előfordulhat, hogy egy hitelesítő adatot egy viselkedéssel kell beállítania. (További információ a hitelesítő adatok lehetséges típusairól: Hitelesítő adattípus kiválasztása.) Bizonyos esetekben, például amikor a Windows hitelesítő adatait használják a hitelesítéshez, a környezet automatikusan létrehozza a tényleges hitelesítő értéket, és nem kell explicit módon beállítania a hitelesítő adatokat (kivéve, ha más hitelesítő adatokat szeretne megadni).

Minden szolgáltatás hitelesítő adata a <serviceBehaviors> gyermekelemeként található. Az alábbi példa egy szolgáltatás hitelesítő adataiként használt tanúsítványt mutat be.

<configuration>  
 <system.serviceModel>  
  <behaviors>  
   <serviceBehaviors>  
    <behavior name="ServiceBehavior1">  
     <serviceCredentials>  
      <serviceCertificate findValue="000000000000000000000000000"
                          storeLocation="CurrentUser"  
      storeName="Root" x509FindType="FindByThumbprint" />  
     </serviceCredentials>  
    </behavior>  
   </serviceBehaviors>  
  </behaviors>  
 </system.serviceModel>  
</configuration>  

Szolgáltatás hitelesítő adatai

A <szolgáltatás hitelesítő adatai> négy gyermekelemet tartalmaznak. Az elemeket és azok használatát a következő szakaszok ismertetik.

<serviceCertificate> elem

Ezzel az elemet használva megadhat egy X.509-tanúsítványt, amely a szolgáltatás üzenetbiztonsági móddal történő hitelesítésére szolgál az ügyfelek számára. Ha rendszeresen megújított tanúsítványt használ, az ujjlenyomata megváltozik. Ebben az esetben használja a tulajdonos nevét X509FindType , mert a tanúsítvány ugyanazzal a tulajdonosnévvel újra kiadható.

Az elem használatáról további információt az Ügyfél hitelesítő adatainak megadása című témakörben talál.

<<clientCertificate elem tanúsítványa>>

Használja a <tanúsítványelemet> , ha a szolgáltatásnak előzetesen rendelkeznie kell az ügyfél tanúsítványával az ügyféllel való biztonságos kommunikációhoz. Ez a kétoldalas kommunikációs minta használatakor fordul elő. A tipikusabb kérés-válasz mintában az ügyfél a tanúsítványát is tartalmazza a kérésben, amelyet a szolgáltatás az ügyfélnek adott válasz biztonságossá tételéhez használ. A kétoldalas kommunikációs minta azonban nem rendelkezik kérésekkel és válaszokkal. A szolgáltatás nem tudja kinyerni az ügyfél tanúsítványát a kommunikációból, ezért a szolgáltatásnak előzetesen szüksége van az ügyfél tanúsítványára az üzenetek ügyfélnek való védelméhez. Az ügyfél tanúsítványát sávon kívüli módon kell beszereznie, és ezzel az elemet használva meg kell adnia a tanúsítványt. További információ a kétoldalas szolgáltatásokról : Útmutató: Kétoldalas szerződés létrehozása.

<clientCertificate <elem hitelesítése>>

A <hitelesítési> elem lehetővé teszi az ügyfelek hitelesítésének testreszabását. Az attribútumot beállíthatja CertificateValidationMode a következőreNone: , ChainTrust, PeerOrChainTrustPeerTrustvagy Custom. A szint alapértelmezés szerint a következőre ChainTrustvan állítva, amely azt határozza meg, hogy minden tanúsítványnak a lánc tetején lévő legfelső szintű hitelesítésszolgáltatóval végződő tanúsítványhierarchiában kell lennie. Ez a legbiztonságosabb mód. Azt is beállíthatja, hogy az érték PeerOrChainTrustlegyen az, amely azt határozza meg, hogy a rendszer elfogadja az önkibocsátott tanúsítványokat (társmegbízhatóság), valamint a megbízható láncban lévő tanúsítványokat. Ez az érték az ügyfelek és szolgáltatások fejlesztése és hibakeresése során használatos, mivel az önkibocsátott tanúsítványokat nem kell megbízható szolgáltatótól megvásárolni. Az ügyfél üzembe helyezésekor használja inkább az ChainTrust értéket. Az értéket a következőre is beállíthatja Custom: . Ha az Custom értékre van állítva, az CustomCertificateValidatorType attribútumot egy szerelvényre és a tanúsítvány érvényesítéséhez használt típusra is be kell állítania. Saját egyéni érvényesítő létrehozásához örökölnie kell az absztrakt X509CertificateValidator osztályt.

<issuedTokenAuthentication> elem

A kibocsátott jogkivonat-forgatókönyv három szakaszból áll. Az első szakaszban a szolgáltatás elérésére próbáló ügyfél egy biztonságos jogkivonat-szolgáltatásra (STS) hivatkozik. Az STS ezután hitelesíti az ügyfelet, majd jogkivonatot ad ki az ügyfélnek, általában egy SAML-jogkivonatot. Az ügyfél ezután a jogkivonattal visszatér a szolgáltatáshoz. A szolgáltatás megvizsgálja a jogkivonatot olyan adatok esetében, amelyek lehetővé teszik a szolgáltatás számára a jogkivonat és ezáltal az ügyfél hitelesítését. A jogkivonat hitelesítéséhez a biztonságos jogkivonat-szolgáltatás által használt tanúsítványnak ismertnek kell lennie a szolgáltatás számára. A <kibocsátottTokenAuthentication> elem az ilyen biztonságos jogkivonat-szolgáltatástanúsítványok adattára. Tanúsítványok hozzáadásához használja az ismertCertificates elemet>.< Szúrjon be egy hozzáadást <> az egyes tanúsítványokhoz az alábbi példában látható módon.

<issuedTokenAuthentication>  
   <knownCertificates>  
      <add findValue="www.contoso.com"
           storeLocation="LocalMachine" storeName="My"
           X509FindType="FindBySubjectName" />  
    </knownCertificates>  
</issuedTokenAuthentication>  

Alapértelmezés szerint a tanúsítványokat biztonságos jogkivonat-szolgáltatásból kell beszerezni. Ezek az "ismert" tanúsítványok biztosítják, hogy csak a megbízható ügyfelek férhessenek hozzá egy szolgáltatáshoz.

Az allowedAudienceUris gyűjteményt olyan összevont alkalmazásban kell használnia<, amely biztonsági jogkivonatokat kiadó SamlSecurityToken biztonságos jogkivonat-szolgáltatást (STS) használ.> Amikor az STS kiadja a biztonsági jogkivonatot, megadhatja azon webszolgáltatások URI-ját, amelyekhez a biztonsági jogkivonatot a biztonsági jogkivonathoz adja hozzá SamlAudienceRestrictionCondition . Ez lehetővé teszi a SamlSecurityTokenAuthenticator címzett webszolgáltatás számára, hogy ellenőrizze, hogy a kiadott biztonsági jogkivonat erre a webszolgáltatásra vonatkozik-e. Ehhez az ellenőrzéshez az alábbiakat kell elvégeznie:

  • Állítsa a audienceUriMode issuedTokenAuthentication> attribútumot <a következőre Always vagy BearerKeyOnly.

  • Adja meg az érvényes URI-k készletét, ha hozzáadja az URI-kat ehhez a gyűjteményhez. Ehhez szúrjon be egy hozzáadást <> az egyes URI-khoz

További információ: SamlSecurityTokenAuthenticator.

A konfigurációs elem használatával kapcsolatos további információkért lásd : Hitelesítő adatok konfigurálása összevonási szolgáltatáson.

Névtelen CardSpace-felhasználók engedélyezése

AllowUntrustedRsaIssuers Az elem true attribútumának beállításával <IssuedTokenAuthentication> bármely ügyfél megjeleníthet egy önkibocsátott jogkivonatot, amely egy tetszőleges RSA-kulcspárral van aláírva. A kiállító nem megbízható, mert a kulcshoz nincsenek kiállítói adatok társítva. A CardSpace-felhasználók létrehozhatnak egy önkibocsátó kártyát, amely magában foglalja az önazonossági jogcímeket. Használja ezt a képességet körültekintően. A funkció használatához az RSA nyilvános kulcsra úgy gondoljon, mint egy biztonságosabb jelszóra, amelyet egy adatbázisban kell tárolni egy felhasználónévvel együtt. Mielőtt engedélyezi az ügyfél hozzáférését a szolgáltatáshoz, ellenőrizze az ügyfél által bemutatott NYILVÁNOS RSA-kulcsot úgy, hogy összehasonlítja azt a megjelenített felhasználónév tárolt nyilvános kulcsával. Ez feltételezi, hogy létrehozott egy regisztrációs folyamatot, amellyel a felhasználók regisztrálhatják a felhasználóneveiket, és társíthatják őket a saját kiadású RSA nyilvános kulcsokkal.

Ügyfél hitelesítő adatai

Az ügyfél hitelesítő adataival hitelesítheti az ügyfelet a szolgáltatásokban olyan esetekben, amikor kölcsönös hitelesítésre van szükség. A szakasz segítségével megadhatja a szolgáltatástanúsítványokat olyan helyzetekhez, amikor az ügyfélnek biztonságossá kell tennie az üzeneteket egy szolgáltatásnak a szolgáltatás tanúsítványával.

Az ügyfelet összevonási forgatókönyv részeként is konfigurálhatja, hogy biztonságos jogkivonat-szolgáltatásból vagy helyi jogkivonat-kibocsátóból származó jogkivonatokat használjon. Az összevont forgatókönyvekről további információt az összevonási és a kibocsátott jogkivonatok című témakörben talál. Az összes ügyfél-hitelesítő adat az <endpointBehaviors> alatt található, ahogy az az alábbi kódban is látható.

<behaviors>  
 <endpointBehaviors>  
  <behavior name="EndpointBehavior1">  
   <clientCredentials>  
    <clientCertificate findValue="cn=www.contoso.com"
        storeLocation="LocalMachine"  
        storeName="AuthRoot" x509FindType="FindBySubjectName" />  
    <serviceCertificate>  
     <defaultCertificate findValue="www.cohowinery.com"
                    storeLocation="LocalMachine"  
                    storeName="Root" x509FindType="FindByIssuerName" />  
    <authentication revocationMode="Online"  
                    trustedStoreLocation="LocalMachine" />  
    </serviceCertificate>  
   </clientCredentials>  
  </behavior>  
 </endpointBehaviors>  
</behaviors>  

<clientCertificate> elem

Állítsa be az ügyfél ezzel az elemmel való hitelesítéséhez használt tanúsítványt. További információ : Az ügyfél hitelesítő adatainak megadása.

<httpDigest>

Ezt a funkciót engedélyezni kell a Windowson és az Internet Information Servicesen (IIS) futó Active Directoryval. További információ: Kivonatos hitelesítés az IIS 6.0-ban.

<issuedToken> elem

A <kibocsátottToken> tartalmazza a jogkivonatok helyi kiállítójának konfigurálásához használt elemeket, illetve a biztonsági jogkivonat-szolgáltatásban használt viselkedéseket. Az ügyfél helyi kiállító használatára való konfigurálásával kapcsolatos utasításokért lásd : Helyi kiállító konfigurálása.

<localIssuerAddress>

Megadja az alapértelmezett biztonsági jogkivonat szolgáltatáscímét. Ez akkor használatos, ha a WSFederationHttpBinding rendszer nem ad meg URL-címet a biztonsági jogkivonat-szolgáltatáshoz, vagy ha egy összevont kötés http://schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymous kiállítói címe vagy null. Ilyen esetekben a ClientCredentials helyi kibocsátó címét és a kibocsátóval való kommunikációhoz használandó kötést kell konfigurálni.

<issuerChannelBehaviors>

A kibocsátóChannelBehaviors> használatával adja hozzá a <biztonsági jogkivonat-szolgáltatással való kommunikáció során használt WCF-ügyfélviselkedéseket. Az ügyfél viselkedésének meghatározása az <endpointBehaviors> szakaszban. Definiált viselkedés használatához adjon hozzá egy <add> elemet az <issuerChannelBehaviors> elemhez két attribútummal. Állítsa be a issuerAddress biztonsági jogkivonat-szolgáltatás URL-címét, és állítsa az behaviorConfiguration attribútumot a definiált végpont viselkedésének nevére az alábbi példában látható módon.

<clientCredentials>  
   <issuedToken>  
      <issuerChannelBehaviors>  
         <add issuerAddress="http://www.contoso.com"  
               behaviorConfiguration="clientBehavior1" />
      </issuerChannelBehaviors>  
   </issuedToken>  
</clientCredentials>

<serviceCertificate> elem

Ezzel az elemet használva szabályozhatja a szolgáltatástanúsítványok hitelesítését.

A <defaultCertificate> elem egyetlen tanúsítványt is tárolhat, ha a szolgáltatás nem ad meg tanúsítványt.

Használja a <scopedCertificates> parancsot, és< adja hozzá> az adott szolgáltatásokhoz társított szolgáltatástanúsítványok beállításához. Az <add> elem tartalmaz egy targetUri attribútumot, amely a tanúsítvány és a szolgáltatás társítására szolgál.

A <hitelesítési> elem megadja a tanúsítványok hitelesítéséhez használt megbízhatósági szintet. Alapértelmezés szerint a szint "ChainTrust" értékre van állítva, amely azt határozza meg, hogy minden tanúsítványnak egy megbízható hitelesítésszolgáltatóval végződő tanúsítványhierarchiában kell lennie a lánc tetején. Ez a legbiztonságosabb mód. Az értéket "PeerOrChainTrust" értékre is beállíthatja, amely meghatározza, hogy a rendszer elfogadja-e a saját tanúsítványokat (társmegbízhatóság), valamint a megbízható láncban lévő tanúsítványokat. Ez az érték az ügyfelek és szolgáltatások fejlesztése és hibakeresése során használatos, mivel az önkibocsátott tanúsítványokat nem kell megbízható szolgáltatótól megvásárolni. Az ügyfél üzembe helyezésekor használja inkább a "ChainTrust" értéket. Az értéket "Egyéni" vagy "Nincs" értékre is beállíthatja. Az "Egyéni" érték használatához az CustomCertificateValidatorType attribútumot egy szerelvényre és típusra is be kell állítania a tanúsítvány érvényesítéséhez. Saját egyéni érvényesítő létrehozásához örökölnie kell az absztrakt X509CertificateValidator osztályt. További információ : Egyéni tanúsítvány-érvényesítőt alkalmazó szolgáltatás létrehozása.

A <hitelesítési> elem tartalmaz egy RevocationMode attribútumot, amely meghatározza a tanúsítványok visszavonási ellenőrzésének módját. Az alapértelmezett érték "online", ami azt jelzi, hogy a rendszer automatikusan ellenőrzi a tanúsítványok visszavonását. További információ: A tanúsítványok használata.

ServiceAuthorization

A <serviceAuthorization> elem olyan elemeket tartalmaz, amelyek befolyásolják az engedélyezést, az egyéni szerepkör-szolgáltatókat és a megszemélyesítést.

Az PrincipalPermissionAttribute osztály egy szolgáltatásmetódusra lesz alkalmazva. Az attribútum meghatározza a védett metódusok használatának engedélyezésekor használni kívánt felhasználói csoportokat. Az alapértelmezett érték a "UseWindowsGroups" (UseWindowsGroups) érték, amely azt határozza meg, hogy a Windows-csoportok, például a "Rendszergazda istrators" vagy a "Felhasználók" olyan identitásra keresnek, amely megpróbál hozzáférni egy erőforráshoz. A "UseAspNetRoles" értéket is megadhatja az elem alatt <system.web> konfigurált egyéni szerepkör-szolgáltató használatához, ahogyan az az alábbi kódban látható.

<system.web>  
  <membership defaultProvider="SqlProvider"
   userIsOnlineTimeWindow="15">  
     <providers>  
       <clear />  
       <add
          name="SqlProvider"
          type="System.Web.Security.SqlMembershipProvider"
          connectionStringName="SqlConn"  
          applicationName="MembershipProvider"  
          enablePasswordRetrieval="false"  
          enablePasswordReset="false"  
          requiresQuestionAndAnswer="false"  
          requiresUniqueEmail="true"  
          passwordFormat="Hashed" />  
     </providers>  
   </membership>  
  <!-- Other configuration code not shown.-->  
</system.web>  

Az alábbi kód az roleProviderName attribútummal együtt használt kódot jeleníti meg principalPermissionMode .

<behaviors>  
 <behavior name="ServiceBehaviour">
  <serviceAuthorization principalPermissionMode ="UseAspNetRoles"
                        roleProviderName ="SqlProvider" />  
</behavior>
   <!-- Other configuration code not shown. -->  
</behaviors>  

Biztonsági auditok konfigurálása

<A serviceSecurityAudit> használatával adja meg a naplót, és hogy milyen típusú eseményeket szeretne naplózni. További információ: Naplózás.

<behaviors>
 <serviceBehaviors>  
  <behavior name="NewBehavior">  
    <serviceSecurityAudit auditLogLocation="Application"
             suppressAuditFailure="true"  
             serviceAuthorizationAuditLevel="Success"
             messageAuthenticationAuditLevel="Success" />  
  </behavior>  
 </serviceBehaviors>  
</behaviors>  

Biztonságos metaadatok cseréje

A metaadatok ügyfelekre való exportálása kényelmes a szolgáltatás- és ügyfélfejlesztők számára, mivel lehetővé teszi a konfiguráció és az ügyfélkód letöltését. A szolgáltatás rosszindulatú felhasználók számára való kitettségének csökkentése érdekében az átvitel biztonságossá tétele az SSL http-n (HTTPS) keresztüli mechanizmusával lehetséges. Ehhez először egy megfelelő X.509-tanúsítványt kell kötnie egy adott porthoz a szolgáltatást üzemeltető számítógépen. (További információ: Tanúsítványok használata.) Másodszor adjon hozzá egy <serviceMetadata> értéket a szolgáltatáskonfigurációhoz, és állítsa be az attribútumot a HttpsGetEnabled következőre true: . Végül állítsa be az HttpsGetUrl attribútumot a szolgáltatás metaadat-végpontjának URL-címére az alábbi példában látható módon.

<behaviors>  
 <serviceBehaviors>  
  <behavior name="NewBehavior">  
    <serviceMetadata httpsGetEnabled="true"
     httpsGetUrl="https://myComputerName/myEndpoint" />  
  </behavior>  
 </serviceBehaviors>  
</behaviors>  

Lásd még