Pótkulcs mintaValet Key pattern

Egy jogkivonat használatával korlátozott közvetlen hozzáférést biztosíthat az ügyfelek számára egy adott erőforráshoz, hogy így csökkentse egy alkalmazás adatátviteli követelményeit.Use a token that provides clients with restricted direct access to a specific resource, in order to offload data transfer from the application. Ez különösen hasznos olyan alkalmazások esetében, amelyek felhőben futtatott tárolórendszereket vagy üzenetsorokat használnak, mert minimalizálja a költségeket és maximalizálja a skálázhatóságot és a teljesítményt.This is particularly useful in applications that use cloud-hosted storage systems or queues, and can minimize cost and maximize scalability and performance.

Kontextus és problémaContext and problem

Az ügyfélprogramoknak és a böngészőknek gyakran kell fájlokat vagy adatstreameket olvasniuk, illetve írniuk az alkalmazás tárolójában.Client programs and web browsers often need to read and write files or data streams to and from an application’s storage. Általában az alkalmazás fogja kezelni az adatok mozgását – vagy lekérdezi a tárolóból és streameli az ügyfélnek, vagy beolvassa az ügyfél által feltöltött streamet, és menti az adattárba.Typically, the application will handle the movement of the data — either by fetching it from storage and streaming it to the client, or by reading the uploaded stream from the client and storing it in the data store. Azonban ez a megközelítés értékes erőforrásokat foglal le, például számítási, memória- és sávszélesség-erőforrásokat.However, this approach absorbs valuable resources such as compute, memory, and bandwidth.

Az adattárak képesek közvetlenül kezelni az adatfeltöltést és -letöltést, így az alkalmazás részéről nincs szükség semmilyen feldolgozási tevékenységre az adatok mozgatásához.Data stores have the ability to handle upload and download of data directly, without requiring that the application perform any processing to move this data. Ehhez viszont általában az ügyfélnek hozzá kell férnie a tároló biztonsági hitelesítő adataihoz.But, this typically requires the client to have access to the security credentials for the store. Ez hasznos módszer lehet, ha minimalizálni szeretné az adatátvitel költségeit és szükség van az alkalmazás horizontális felskálázására, valamint maximalizálni szeretné a teljesítményt.This can be a useful technique to minimize data transfer costs and the requirement to scale out the application, and to maximize performance. Azonban ez azt jelenti, hogy az alkalmazás már nem fogja tudni kezelni az adatok biztonságát.It means, though, that the application is no longer able to manage the security of the data. Miután az ügyfél közvetlen hozzáféréssel tud kapcsolódni az adattárhoz, az alkalmazás már nem töltheti be a forgalomirányító szerepét.After the client has a connection to the data store for direct access, the application can't act as the gatekeeper. Már nem az alkalmazás szabályozza a folyamatot, és nem akadályozhatja meg a későbbi feltöltéseket vagy letöltéseket az adattárolóban.It's no longer in control of the process and can't prevent subsequent uploads or downloads from the data store.

Ez nem reális megközelítés elosztott rendszerek esetében, amelyek nem megbízható ügyfeleket is kiszolgálnak.This isn't a realistic approach in distributed systems that need to serve untrusted clients. Ehelyett az alkalmazásoknak képesnek kell lenniük az adathozzáférést biztonságosan és részletesen szabályozni, ugyanakkor csökkenteniük kell a kiszolgáló terheltségét is, méghozzá úgy, hogy először létre kell hozniuk a kapcsolatot, majd engedélyezniük kell az ügyfél számára a közvetlen kommunikációt az adattárral, hogy az végrehajthassa a szükséges olvasási vagy írási műveleteket.Instead, applications must be able to securely control access to data in a granular way, but still reduce the load on the server by setting up this connection and then allowing the client to communicate directly with the data store to perform the required read or write operations.

MegoldásSolution

Meg kell oldania az adattárhoz való hozzáférés szabályozását olyan esetben, amikor a tároló nem képes kezelni az ügyfelek hitelesítését és ellenőrzését.You need to resolve the problem of controlling access to a data store where the store can't manage authentication and authorization of clients. Egy tipikus megoldási lehetőség, hogy korlátozza a hozzáférést az adattár nyilvános kapcsolatához, és biztosít egy kulcsot vagy jogkivonatot az ügyfélnek, amelyet az adattár ellenőrizni tud.One typical solution is to restrict access to the data store’s public connection and provide the client with a key or token that the data store can validate.

Ezt a kulcsot vagy a jogkivonatot általában pótkulcsnak nevezzük.This key or token is usually referred to as a valet key. A kulcs időkorlátos hozzáférést biztosít bizonyos erőforrásokhoz, és csak előre meghatározott műveleteket tesz lehetővé, például írást és olvasást a tárolón vagy üzenetsorban, vagy fel- és letöltést böngészőn keresztül.It provides time-limited access to specific resources and allows only predefined operations such as reading and writing to storage or queues, or uploading and downloading in a web browser. Az alkalmazások gyorsan és könnyen létrehozhatnak és kioszthatnak pótkulcsokat ügyféleszközök és böngészők számára, amelyekkel az ügyfelek elvégezhetik a szükséges műveleteket anélkül, hogy az alkalmazásnak közvetlenül kezelni kellene az adatátvitelt.Applications can create and issue valet keys to client devices and web browsers quickly and easily, allowing clients to perform the required operations without requiring the application to directly handle the data transfer. Ezzel megszűnik az alkalmazás és a kiszolgáló feldolgozási többletterhelése, a teljesítményre és skálázhatóságra gyakorolt hatásával együtt.This removes the processing overhead, and the impact on performance and scalability, from the application and the server.

Az ügyfél a jogkivonattal az adattár egy kijelölt erőforrásához férhet hozzá, csak meghatározott ideig, és a hozzáférési engedélyek bizonyos mértékű korlátozásával, mint ahogy az ábrán látható.The client uses this token to access a specific resource in the data store for only a specific period, and with specific restrictions on access permissions, as shown in the figure. A megadott időszak után a kulcs érvénytelenné válik, és többé nem ad hozzáférést az erőforráshoz.After the specified period, the key becomes invalid and won't allow access to the resource.

1. ábra – A minta áttekintése

Ezen felül lehetősége van más függőségekkel (például az adatok hatóköre) rendelkező kulcs konfigurálására.It's also possible to configure a key that has other dependencies, such as the scope of the data. Például az adattár képességeihez mérten a kulcs meghatározhat egy teljes táblát az adattáron belül, vagy akár csak egy tábla bizonyos sorait.For example, depending on the data store capabilities, the key can specify a complete table in a data store, or only specific rows in a table. Felhőalapú tárolórendszerek esetében a kulcs megadhat egy tárolót, vagy csak egy adott elemet egy tárolón belül.In cloud storage systems the key can specify a container, or just a specific item within a container.

A kulcsot az alkalmazás is képes érvényteleníteni.The key can also be invalidated by the application. Ez hasznos megközelítés abban az esetben, ha az ügyfél értesíti a kiszolgálót az adatátvitel befejeztéről.This is a useful approach if the client notifies the server that the data transfer operation is complete. A kiszolgáló ezután érvénytelenítheti a kulcsot a további hozzáférés megakadályozása érdekében.The server can then invalidate that key to prevent further access.

A minta használatával leegyszerűsítheti az erőforrásokhoz való hozzáférés kezelését, mert nem kell létrehozni és hitelesíteni a felhasználót, engedélyeket megadni, majd végül eltávolítani a felhasználót.Using this pattern can simplify managing access to resources because there's no requirement to create and authenticate a user, grant permissions, and then remove the user again. Emellett könnyű korlátozni a helyet, az engedélyt és az érvényességi időszakot – ehhez csupán létre kell hoznia egy kulcsot futtatáskor.It also makes it easy to limit the location, the permission, and the validity period—all by simply generating a key at runtime. A legfontosabb tényező az érvényességi időszak, és különösen az erőforrás helyének minél szigorúbb korlátozása, hogy a kulcs birtokosa azt csak rendeltetésszerű célokra használhassa.The important factors are to limit the validity period, and especially the location of the resource, as tightly as possible so that the recipient can only use it for the intended purpose.

Problémák és megfontolandó szempontokIssues and considerations

A minta megvalósítása során az alábbi pontokat vegye figyelembe:Consider the following points when deciding how to implement this pattern:

Kezelje a kulcs érvényességi állapotát és időtartamát.Manage the validity status and period of the key. Ha a kulcs kiszivárog vagy megsérül, az gyakorlatilag szabaddá teszi a célelemet, amely az érvényességi idő alatt kártékony használat áldozata lehet.If leaked or compromised, the key effectively unlocks the target item and makes it available for malicious use during the validity period. A kiállítás módjától függően a kulcsot általában visszavonhatja vagy letilthatja.A key can usually be revoked or disabled, depending on how it was issued. A kiszolgálóoldali szabályzatok módosíthatók, illetve az aláírást biztosító kiszolgálói kulcs érvényteleníthető.Server-side policies can be changed or, the server key it was signed with can be invalidated. Adjon meg rövid érvényességi időt, hogy a minimálisra csökkentse az adattárra irányuló jogosulatlan műveletek kockázatát.Specify a short validity period to minimize the risk of allowing unauthorized operations to take place against the data store. Ha azonban az érvényességi időtartam túl rövid, előfordulhat, hogy az ügyfél nem tudja elvégezni a kívánt műveletet a kulcs érvényességének lejárta előtt.However, if the validity period is too short, the client might not be able to complete the operation before the key expires. Engedélyezze a jogosult felhasználók számára a kulcs megújítását az érvényesség lejárta előtt arra az esetre, ha többszöri hozzáférésre van szükség a védett erőforráshoz.Allow authorized users to renew the key before the validity period expires if multiple accesses to the protected resource are required.

Szabályozza a kulcs által biztosított hozzáférési szintet.Control the level of access the key will provide. A kulcs általában csak a művelethez szükséges tevékenységek végrehajtását engedélyezi a felhasználó számára, például csak olvasható hozzáférést ad, ha az ügyfélnek nem szabadna adatot feltöltenie az adattárba.Typically, the key should allow the user to only perform the actions necessary to complete the operation, such as read-only access if the client shouldn't be able to upload data to the data store. Fájlfeltöltés esetén olyan kulcsot szokás megadni, amely csak írási engedélyt biztosít, valamint meghatározza a helyet és az érvényességi időt.For file uploads, it's common to specify a key that provides write-only permission, as well as the location and the validity period. Döntően fontos pontosan meghatározni azt az erőforrást vagy azt az erőforráskészletet, amelyre a kulcs érvényes.It's critical to accurately specify the resource or the set of resources to which the key applies.

Gondolja át, hogyan fogja szabályozni a felhasználó viselkedését.Consider how to control users’ behavior. Az ilyen minta megvalósításával együtt jár az, hogy kevésbé tudja szabályozni azokat az erőforrásokat, amelyekhez hozzáférést biztosít a felhasználóknak.Implementing this pattern means some loss of control over the resources users are granted access to. A szabályozás mértékét korlátozzák a szolgáltatás vagy a célzott adattár esetében elérhető szabályzatok és engedélyek képességei.The level of control that can be exerted is limited by the capabilities of the policies and permissions available for the service or the target data store. Például általában nincs lehetőség egy olyan kulcs létrehozására, amely korlátozza a tárolóra írható adat méretét, vagy azt, hogy egy kulccsal hányszor férhetnek hozzá egy adott fájlhoz.For example, it's usually not possible to create a key that limits the size of the data to be written to storage, or the number of times the key can be used to access a file. Ez váratlanul hatalmas adatátviteli költséget eredményezhet, még akkor is, ha az az ügyfél használja a kulcsot, akinek szánták, és a kód olyan hibájából adódhat, amely ismétlődő fel- vagy letöltést okoz.This can result in huge unexpected costs for data transfer, even when used by the intended client, and might be caused by an error in the code that causes repeated upload or download. A fájlfeltöltések számának korlátozásához ahol lehetséges, kényszerítse az ügyfelet, hogy értesítse az alkalmazást a feltöltés befejezéséről.To limit the number of times a file can be uploaded, where possible, force the client to notify the application when one operation has completed. Néhány adattár például eseményeket hoz létre, amelyeket az alkalmazás felhasználhat a műveletek monitorozására és a felhasználói viselkedés szabályozására.For example, some data stores raise events the application code can use to monitor operations and control user behavior. Azonban nehéz kvótákat előírni az egyéni felhasználók számára egy több bérlős helyzet esetén, ahol egyetlen bérlő összes felhasználója ugyanazt a kulcsot használja.However, it's hard to enforce quotas for individual users in a multi-tenant scenario where the same key is used by all the users from one tenant.

Érvényesítsen és igény szerint vírusmentesítsen minden feltöltött adatot.Validate, and optionally sanitize, all uploaded data. Ha egy kártevő felhasználó hozzáférést szerzett a kulcshoz, feltölthet olyan adatot, amelyet a rendszer károsítására terveztek.A malicious user that gains access to the key could upload data designed to compromise the system. Más esetekben az engedélyezett felhasználók feltölthetnek érvénytelen adatokat, amelyek feldolgozáskor hibához vagy a rendszer meghibásodásához vezethetnek.Alternatively, authorized users might upload data that's invalid and, when processed, could result in an error or system failure. Ez ellen úgy védekezhet, hogy gondoskodik az összes adat érvényesítéséről és rosszindulatú kódok ellenőrzéséről a használat előtt.To protect against this, ensure that all uploaded data is validated and checked for malicious content before use.

Naplózzon minden műveletet.Audit all operations. Sok kulcsalapú mechanizmus képes olyan műveletek naplózására, mint a feltöltések, a letöltések és a hibák.Many key-based mechanisms can log operations such as uploads, downloads, and failures. Ezeket a naplókat általában beépítheti egy naplózási folyamatba, illetve számlázáshoz is használhatja, ha a felhasználónak fájlméret vagy adatmennyiség alapján számláz.These logs can usually be incorporated into an audit process, and also used for billing if the user is charged based on file size or data volume. A naplók segítségével észlelheti az olyan hitelesítési hibákat, amelyek esetlegesen a kulcsszolgáltató hibájából vagy egy tárolt hozzáférési szabályzat nem szándékos eltávolításából adódnak.Use the logs to detect authentication failures that might be caused by issues with the key provider, or accidental removal of a stored access policy.

A kulcsot biztonságosan adja át.Deliver the key securely. URL-be ágyazhatja, amelyet a felhasználó egy weblapon tud aktiválni, vagy használhatja egy kiszolgáló-átirányítási műveletben, így a letöltés automatikusan megindul.It can be embedded in a URL that the user activates in a web page, or it can be used in a server redirection operation so that the download occurs automatically. Mindig használjon HTTPS-t, hogy biztonságos csatornán keresztül adja át a kulcsot.Always use HTTPS to deliver the key over a secure channel.

Védje a bizalmas adatokat az átvitel során.Protect sensitive data in transit. A bizalmas adatok szállítása az alkalmazáson keresztül általában SSL vagy TLS használatával történik, és ezt elő kell írni az olyan ügyfelek számára, akik közvetlen hozzáféréssel rendelkeznek az adattárhoz.Sensitive data delivered through the application will usually take place using SSL or TLS, and this should be enforced for clients accessing the data store directly.

A minta megvalósításakor érdemes egyéb problémákról is tájékozódnia:Other issues to be aware of when implementing this pattern are:

  • Ha az ügyfél nem jelzi vagy nem tudja jelezni a kiszolgáló felé a művelet befejeződését, és csak a kulcs lejárati ideje korlátozza, az alkalmazás nem lesz képes naplózási műveletek végrehajtására, például a feltöltések vagy letöltések számának nyomon követésére, és nem képes megakadályozni a többszöri fel- vagy letöltést.If the client doesn't, or can't, notify the server of completion of the operation, and the only limit is the expiration period of the key, the application won't be able to perform auditing operations such as counting the number of uploads or downloads, or preventing multiple uploads or downloads.

  • A létrehozható kulcskezelési szabályzatok esetenként nem eléggé rugalmasak.The flexibility of key policies that can be generated might be limited. Például bizonyos mechanizmusok csak időzített lejárati idő használatát engedik.For example, some mechanisms only allow the use of a timed expiration period. Más mechanizmusok nem engedik az olvasási/írási engedélyek kellőképpen részletes meghatározását.Others aren't able to specify a sufficient granularity of read/write permissions.

  • Ha meg van adva a kulcs vagy a jogkivonat érvényességi időtartamának kezdeti időpontja, győződjön meg róla, hogy az a jelenlegi kiszolgálóidőnél egy kicsit korábbi időpont, hogy az ügyfelek akkor is kaphassanak hozzáférést, ha a rendszeróra nem teljesen szinkronizált.If the start time for the key or token validity period is specified, ensure that it's a little earlier than the current server time to allow for client clocks that might be slightly out of synchronization. Az alapértelmezett érték a kiszolgáló aktuális rendszerideje, ha nincs egyéb megadva.The default, if not specified, is usually the current server time.

  • A kulcsot tartalmazó URL-cím a kiszolgáló naplófájljaiban lesz rögzítve.The URL containing the key will be recorded in server log files. Bár a kulcs általában már lejár, mire a naplófájlokat a rendszer felhasználná elemzések készítéséhez, gondoskodjon a hozzáférés korlátozásáról.While the key will typically have expired before the log files are used for analysis, ensure that you limit access to them. Ha a naplózási adatokat továbbítja egy monitorozási rendszernek vagy más helyen tárolja őket, fontolja meg egy késleltetési idő bevezetését, amellyel megakadályozza a kulcsok kiszivárgását az érvényességi idejük lejárta előtt.If log data is transmitted to a monitoring system or stored in another location, consider implementing a delay to prevent leakage of keys until after their validity period has expired.

  • Ha az ügyfélkód webböngészőben fut, előfordulhat, hogy a böngészőnek támogatnia kell az eltérő eredetű erőforrások megosztását (CORS), így a webböngészőben lefuthatnak olyan kódok, amelyekkel a weblapot kiszolgáló tartományon keresztül hozzáférhet egy másik tartomány adataihoz.If the client code runs in a web browser, the browser might need to support cross-origin resource sharing (CORS) to enable code that executes within the web browser to access data in a different domain from the one that served the page. Egyes régebbi böngészők és egyes adattárak nem támogatják az CORS-t, és előfordulhat, hogy az ezekben a böngészőkben futó kód nem tud használni egy inas-kulcsot, hogy hozzáférést biztosítson egy másik tartományban lévő, például egy felhőalapú Storage-fiókban lévő adateléréshez.Some older browsers and some data stores don't support CORS, and code that runs in these browsers might not be able to use a valet key to provide access to data in a different domain, such as a cloud storage account.

Mikor érdemes ezt a mintát használni?When to use this pattern

Ez a minta az alábbi helyzetekben lehet hasznos:This pattern is useful for the following situations:

  • Ha az erőforrások terhelésének minimálisra csökkentésére, illetve a lehető legnagyobb teljesítményre és skálázhatóságra van szükség.To minimize resource loading and maximize performance and scalability. Pótkulcs használatakor nem kell zárolni az erőforrást, nem szükséges a távoli kiszolgáló meghívása, nincs korlátozva a kiadható pótkulcsok száma, és elkerülheti, hogy az alkalmazáskódon keresztüli adatátvitel miatt egyetlen meghibásodási pont alakuljon ki.Using a valet key doesn't require the resource to be locked, no remote server call is required, there's no limit on the number of valet keys that can be issued, and it avoids a single point of failure resulting from performing the data transfer through the application code. A pótkulcs létrehozása általában egy egyszerű kriptográfiai művelet, amelynek során aláír egy sztringet egy kulccsal.Creating a valet key is typically a simple cryptographic operation of signing a string with a key.

  • Ha az üzemeltetési költségek csökkentésére van szükség.To minimize operational cost. A közvetlen hozzáférés engedélyezése a tárolókhoz és az üzenetsorokhoz erőforrás- és költséghatékony, lecsökkentheti a hálózaton belüli oda-vissza áramló adatok mennyiségét, és lehetővé teheti a szükséges számítási erőforrások számának lecsökkentését.Enabling direct access to stores and queues is resource and cost efficient, can result in fewer network round trips, and might allow for a reduction in the number of compute resources required.

  • Ha az ügyfelek rendszeresen töltenek fel vagy le adatot, különösen nagy forgalom esetén, vagy ha minden művelet nagy méretű fájlok mozgatásával jár.When clients regularly upload or download data, particularly where there's a large volume or when each operation involves large files.

  • Ha az alkalmazásnak csak korlátozott számítási erőforrásai vannak az üzemeltetési korlátozások vagy költségvetési szempontok miatt.When the application has limited compute resources available, either due to hosting limitations or cost considerations. Ebben a helyzetben a minta még hasznosabb lehet akkor, ha sok az egyidejű adatfeltöltés és -letöltés, mert mentesíti az alkalmazást az adatátvitel kezelése alól.In this scenario, the pattern is even more helpful if there are many concurrent data uploads or downloads because it relieves the application from handling the data transfer.

  • Ha az adatok tárolását egy távoli tárolóban vagy egy másik adatközpontban oldja meg.When the data is stored in a remote data store or a different datacenter. Ha az alkalmazásnak be kellett töltenie a forgalomirányító szerepét is, további költséget okozhat az a plusz sávszélesség, amely az adatközpontok közötti adatátvitelből fakad, vagy pedig az ügyfél és az alkalmazás közötti átvitelből nyilvános vagy magánhálózatokon keresztül, majd ezután az alkalmazás és az adatközpont közötti adatátvitelből adódik.If the application was required to act as a gatekeeper, there might be a charge for the additional bandwidth of transferring the data between datacenters, or across public or private networks between the client and the application, and then between the application and the data store.

Nem érdemes ezt a mintát használni a következő helyzetekben:This pattern might not be useful in the following situations:

  • Ha az alkalmazásnak el kell végeznie még néhány feladatot az adatokon, mielőtt azokat a rendszer eltárolja vagy elküldi őket az ügyfélnek.If the application must perform some task on the data before it's stored or before it's sent to the client. Ha például az alkalmazásnak érvényesítést kell végeznie, feltétel a naplófájl sikeres elérése vagy átalakítást kell végezni az adatokon.For example, if the application needs to perform validation, log access success, or execute a transformation on the data. Azonban bizonyos adattárak és ügyfelek képesek egyszerű átalakítások egyeztetésére és végrehajtására, például tömörítésre vagy kibontásra (például egy webböngésző általában tudja kezelni a Gzip formátumokat).However, some data stores and clients are able to negotiate and carry out simple transformations such as compression and decompression (for example, a web browser can usually handle GZip formats).

  • Ha a meglévő alkalmazáskialakítás megnehezíti a minta beépítését.If the design of an existing application makes it difficult to incorporate the pattern. A minta használatához általában egy másik architekturális megközelítés szükséges az adatok szállításához és fogadásához.Using this pattern typically requires a different architectural approach for delivering and receiving data.

  • Ha szükség van auditnaplóra és az adatátviteli műveletek számának szabályozására, és az alkalmazott pótkulcs-mechanizmus nem támogatja azokat az értesítéseket, amelyeket a kiszolgáló ezen műveletek kezeléséhez használhatna.If it's necessary to maintain audit trails or control the number of times a data transfer operation is executed, and the valet key mechanism in use doesn't support notifications that the server can use to manage these operations.

  • Ha korlátozni kell az adatok méretét, különösen feltöltési műveleteknél.If it's necessary to limit the size of the data, especially during upload operations. Az egyetlen megoldás az, ha az alkalmazás a művelet befejezte után ellenőrzi az adatméretet, vagy ellenőrzi a feltöltések nagyságát egy megadott idő eltelte után vagy egy megadott ütemezés szerint.The only solution to this is for the application to check the data size after the operation is complete, or check the size of uploads after a specified period or on a scheduled basis.

PéldaExample

Az Azure támogatja a közös hozzáférésű jogosultságkódot az Azure Storage-en, hogy lehetővé tegye az adatok részletes hozzáférés-szabályozását a blobokban, a táblákban és az üzenetsorokban, valamint Service Bus-üzenetsorok és -témakörök esetében.Azure supports shared access signatures on Azure Storage for granular access control to data in blobs, tables, and queues, and for Service Bus queues and topics. A közös hozzáférésű jogosultságkód konfigurálható úgy, hogy meghatározott hozzáférést biztosítson, például olvasási, írási, frissítési és törlési engedélyt egy adott táblához, egy táblán belüli kulcstartományhoz, egy üzenetsorhoz, egy blobhoz vagy egy blobtárolóhoz.A shared access signature token can be configured to provide specific access rights such as read, write, update, and delete to a specific table; a key range within a table; a queue; a blob; or a blob container. Az érvényesség lehet egy adott időszak, vagy akár lejárati idő nélküli is.The validity can be a specified time period or with no time limit.

Az Azure közös hozzáférésű jogosultságkódja emellett támogatja a kiszolgálón tárolt hozzáférési szabályzatokat, amelyeket összekapcsolhat egy adott erőforrással, például egy táblával vagy blobbal.Azure shared access signatures also support server-stored access policies that can be associated with a specific resource such as a table or blob. Ez a szolgáltatás további szabályozhatóságot és rugalmasságot biztosít, szemben az alkalmazás által létrehozott közös hozzáférésű jogosultságkódok jogkivonataival. Amikor csak lehetséges, javasolt a használata.This feature provides additional control and flexibility compared to application-generated shared access signature tokens, and should be used whenever possible. A kiszolgálón tárolt szabályzatokban módosíthatók a meghatározott beállítások, és a jogkivonatban megjelennek a változások anélkül, hogy új jogkivonatot kellene kibocsátani. A jogkivonatban meghatározott beállítások azonban nem módosíthatók új jogkivonat kiadása nélkül.Settings defined in a server-stored policy can be changed and are reflected in the token without requiring a new token to be issued, but settings defined in the token can't be changed without issuing a new token. Ez a módszer azt is lehetővé teszi, hogy visszavonja egy érvényes közös hozzáférésű jogosultságkód jogkivonatát még annak lejárta előtt.This approach also makes it possible to revoke a valid shared access signature token before it's expired.

További információt a következő témakörben talál: Table sas (közös hozzáférésű aláírás), üzenetsor-társítás és a blob sas-re való frissítés, valamint közös hozzáférésű aláírások használata az MSDN-ben.For more information, see Introducing Table SAS (Shared Access Signature), Queue SAS and update to Blob SAS and Using Shared Access Signatures on MSDN.

Az alábbi kód bemutatja, hogyan hozhat létre egy olyan jogkivonatot egy közös hozzáférésű jogosultságkódhoz, amely öt percig érvényes.The following code shows how to create a shared access signature token that's valid for five minutes. A GetSharedAccessReferenceForUpload metódus a közös hozzáférésű jogosultságkód olyan jogkivonatát adja vissza, amellyel feltölthet egy fájlt az Azure Blob Storage-ba.The GetSharedAccessReferenceForUpload method returns a shared access signatures token that can be used to upload a file to Azure Blob Storage.

public class ValuesController : ApiController
{
  private readonly BlobServiceClient blobServiceClient;
  private readonly string blobContainer;
  ...
  /// <summary>
  /// Return a limited access key that allows the caller to upload a file
  /// to this specific destination for a defined period of time.
  /// </summary>
  private StorageEntitySas GetSharedAccessReferenceForUpload(string blobName)
  {          
      var blob = blobServiceClient.GetBlobContainerClient(this.blobContainer).GetBlobClient(blobName);

      var storageSharedKeyCredential = new StorageSharedKeyCredential(blobServiceClient.AccountName, ConfigurationManager.AppSettings["AzureStorageEmulatorAccountKey"]);

      var blobSasBuilder = new BlobSasBuilder

      {
          BlobContainerName = this.blobContainer,
          BlobName = blobName,
          Resource = "b",
          StartsOn = DateTimeOffset.UtcNow.AddMinutes(-5),
          ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(5)
      };
      policy.SetPermissions(BlobSasPermissions.Write);
      var sas = policy.ToSasQueryParameters(storageSharedKeyCredential).ToString();
  
      return new StorageEntitySas
      {
          BlobUri = blob.Uri,
          Credentials = sas
      };
  }
  public struct StorageEntitySas
  {
      public string Credentials;
      public Uri BlobUri;
  }
}

A teljes minta megtalálható a ValetKey megoldásban, amelyet a GitHubról tölthet le.The complete sample is available in the ValetKey solution available for download from GitHub. Az ebben a megoldásban található ValetKey.Web projekt egy olyan webalkalmazást tartalmaz, amely tartalmazza a fent említett ValuesController osztályt.The ValetKey.Web project in this solution contains a web application that includes the ValuesController class shown above. A ValetKey.Client projektben egy olyan ügyfélalkalmazásra láthat példát, amely ezzel a webalkalmazással kéri le a közös hozzáférésű jogosultságkódhoz tartozó kulcsot, és feltölt egy fájlt a blobtárolóba.A sample client application that uses this web application to retrieve a shared access signatures key and upload a file to blob storage is available in the ValetKey.Client project.

Következő lépésekNext steps

Az alábbi minták és útmutatók szintén hasznosak lehetnek a minta megvalósításakor:The following patterns and guidance might also be relevant when implementing this pattern: