Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tvůrce rozhraní Data API používá pracovní postup autorizace na základě role. Každému příchozímu požadavku, ověřenému nebo ne, je přiřazena role. Role můžou být systémové role nebo role uživatelů. Přiřazená role se pak kontroluje proti definovaným oprávněním zadaným v konfiguraci, abyste pochopili, jaké akce, pole a zásady jsou pro danou roli pro požadovanou entitu k dispozici.
Určení role uživatele
Žádné role nemá výchozí oprávnění. Jakmile tvůrce rozhraní Data API určí pravidlo, musí entita permissions definovat actions tuto roli, aby žádost byla úspěšná.
| Poskytnutý token |
x-ms-api-role Poskytnutý |
x-ms-api-role v Tokenu |
Výsledná role |
|---|---|---|---|
| Ne | Ne | Ne | anonymous |
| Ano | Ne | Ne | authenticated |
| Ano | Ano | Ne | Výjimka |
| Ano | Ano | Ano |
x-ms-api-role hodnota |
Pokud chcete mít jinou roli než anonymous nebo authenticated, je požadována hlavička x-ms-api-role .
Poznámka:
Požadavek může mít jenom jednu roli. I když token označuje více rolí, hodnota x-ms-api-role vybere, která role je přiřazena k požadavku.
Systémové role
Systémové role jsou předdefinované role rozpoznané tvůrcem rozhraní DATA API. Systémová role se automaticky přiřadí žadateli bez ohledu na členství v roli žadatele označeného v přístupových tokenech. Existují dvě systémové role: anonymous a authenticated.
Role anonymního systému
Role anonymous systému je přiřazena k žádostem spuštěným neověřenými uživateli. Pokud se vyžaduje neověřený přístup, musí definované entity modulu runtime obsahovat oprávnění pro anonymous roli.
Příklad
Následující konfigurace modulu runtime pro nástroj pro tvorbu rozhraní Data API ukazuje explicitní nastavení systémové role anonymous, aby zahrnovala přístup k čtení pro entitu Kniha:
"Book": {
"source": "books",
"permissions": [
{
"role": "anonymous",
"actions": [ "read" ]
}
]
}
Když klientská aplikace odešle žádost o přístup k entitě Knihy jménem neověřeného uživatele, neměla by aplikace obsahovat hlavičku Authorization HTTP.
Ověřená systémová role
Role authenticated systému je přiřazena k žádostem spuštěným ověřenými uživateli.
Příklad
Následující konfigurace modulu runtime pro nástroj pro tvorbu rozhraní Data API ukazuje explicitní nastavení systémové role authenticated, aby zahrnovala přístup k čtení pro entitu Kniha:
"Book": {
"source": "books",
"permissions": [
{
"role": "authenticated",
"actions": [ "read" ]
}
]
}
Role uživatelů
Role uživatelů jsou nesystémové role, které jsou přiřazeny uživatelům v rámci zprostředkovatele identity, který jste nastavili v konfiguraci modulu runtime. Aby tvůrce rozhraní Data API vyhodnotil požadavek v kontextu role uživatele, musí být splněny dva požadavky:
- Poskytnutý přístupový token klientské aplikace musí obsahovat deklarace rolí, které uvádějí členství v roli uživatele.
- Klientská aplikace musí obsahovat hlavičku
X-MS-API-ROLEHTTP s požadavky a nastavit hodnotu hlavičky jako požadovanou roli uživatele.
Příklad vyhodnocení role
Následující příklad ukazuje požadavky na entitu Book , která je nakonfigurovaná v konfiguraci modulu runtime Tvůrce rozhraní Data API, následujícím způsobem:
"Book": {
"source": "books",
"permissions": [
{
"role": "anonymous",
"actions": [ "read" ]
},
{
"role": "authenticated",
"actions": [ "read" ]
},
{
"role": "author",
"actions": [ "read" ]
}
]
}
Ve službě Static Web Apps je uživatel ve výchozím nastavení členem anonymní role. Pokud je uživatel ověřený, je členem rolí anonymous a authenticated.
Když klientská aplikace odešle ověřený požadavek tvůrci rozhraní Data API nasazeného pomocí připojení databáze Static Web Apps (Preview), klientská aplikace poskytuje přístupový token, který Static Web Apps transformuje na JSON:
{
"identityProvider": "azuread",
"userId": "d75b260a64504067bfc5b2905e3b8182",
"userDetails": "username",
"userRoles": ["anonymous", "authenticated", "author"]
}
Vzhledem k tomu, že Tvůrce rozhraní Data API vyhodnocuje požadavky v kontextu jedné role, vyhodnotí požadavek ve výchozím nastavení v kontextu systémové role authenticated .
Pokud požadavek klientské aplikace obsahuje také hlavičku X-MS-API-ROLE HTTP s hodnotou author, požadavek se vyhodnotí v kontextu author role. Příklad požadavku včetně přístupového tokenu a X-MS-API-ROLE hlavičky HTTP:
curl -k -r GET -H 'Authorization: Bearer ey...' -H 'X-MS-API-ROLE: author' https://localhost:5001/api/Book
Důležité
Požadavek klientské aplikace se odmítne, když deklarace identity zadaného roles přístupového tokenu neobsahuje roli uvedenou v X-MS-API-ROLE hlavičce.
Povolení
Oprávnění popisují:
- Kdo může na základě členství v roli podávat žádosti ohledně entity?
- Jaké akce (vytvoření, čtení, aktualizace, odstranění, spuštění) může uživatel provádět?
- Která pole jsou pro konkrétní akci přístupná?
- Jaká další omezení existují u výsledků vrácených požadavkem?
Syntaxe pro definování oprávnění je popsaná v článku o konfiguraci modulu runtime.
Důležité
V konfiguraci oprávnění jedné entity může být definováno více rolí. Požadavek se ale vyhodnocuje pouze v kontextu jedné role:
- Ve výchozím nastavení je buď role systému
anonymous, neboauthenticated - Pokud je zahrnuta, nastaví se role v hlavičce HTTP
X-MS-API-ROLE.
Ve výchozím nastavení zabezpečeno
Ve výchozím nastavení nemá entita nakonfigurovaná žádná oprávnění, což znamená, že k entitě nemá nikdo přístup. Tvůrce rozhraní Data API navíc ignoruje databázové objekty, pokud nejsou odkazovány v konfiguraci modulu runtime.
Oprávnění musí být explicitně nakonfigurovaná.
Pokud chcete povolit neověřený přístup k entitě, anonymous musí být role explicitně definována v oprávněních entity. Například oprávnění book entity jsou explicitně nastavena tak, aby povolovala neověřený přístup pro čtení:
"book": {
"source": "dbo.books",
"permissions": [{
"role": "anonymous",
"actions": [ "read" ]
}]
}
Pokud chcete zjednodušit definici oprávnění u entity, předpokládejme, že pokud pro roli neexistují žádná konkrétní oprávnění authenticated , použijí se oprávnění definovaná pro danou anonymous roli. Tato book konfigurace dříve umožňovala všem anonymním nebo ověřeným uživatelům provádět operace čtení na book entitě.
Pokud by operace čtení měly být omezené jenom na ověřené uživatele, měla by se nastavit následující konfigurace oprávnění, což vede k zamítnutí neověřených požadavků:
"book": {
"source": "dbo.books",
"permissions": [{
"role": "authenticated",
"actions": [ "read" ]
}]
}
Entita nevyžaduje a není s oprávněními předem nakonfigurovaná pro role anonymous a authenticated. Jedna nebo více uživatelských rolí je možné definovat v rámci konfigurace oprávnění entity a všechny ostatní nedefinované role, systém nebo uživatelem definované, přístup se automaticky odepře.
V následujícím příkladu je role administrator uživatele jedinou definovanou rolí pro entitu book . Aby uživatel mohl pracovat s entitou administrator, musí být členem role X-MS-API-ROLE a tuto roli zahrnout do book hlavičky HTTP.
"book": {
"source": "dbo.books",
"permissions": [{
"role": "administrator",
"actions": [ "*" ]
}]
}
Poznámka:
Pokud chcete vynutit řízení přístupu pro dotazy GraphQL při použití Tvůrce rozhraní Data API se službou Azure Cosmos DB, musíte použít direktivu @authorize v zadaném souboru schématu GraphQL. Pro mutace a filtry v dotazech GraphQL se však řízení přístupu stále vynucuje konfigurací oprávnění, jak bylo popsáno výše.
Akce
Akce popisují přístupnost entity v rámci oboru role. Akce lze zadat jednotlivě nebo pomocí zástupné zkratky: * (hvězdička). Zástupný znak představuje všechny akce podporované pro typ entity.
- Tabulky a zobrazení:
create,read,update,delete - Uložené procedury:
execute
Další informace o akcích najdete v dokumentaci ke konfiguračnímu souboru .
Přístup k polím
Můžete nakonfigurovat, která pole mají být pro akci přístupná. Můžete například nastavit pole, která mají být zahrnuta a vyloučena z read akce.
Následující příklad zabraňuje uživatelům v roli free-access provádět operace čtení na Column3. Odkazy na Column3 požadavky GET (koncový bod REST) nebo dotazy (koncový bod GraphQL) mají za následek odmítnutý požadavek:
"book": {
"source": "dbo.books",
"permissions": [
{
"role": "free-access",
"actions": [
"create",
"update",
"delete",
{
"action": "read",
"fields": {
"include": [ "Column1", "Column2" ],
"exclude": [ "Column3" ]
}
}
]
}
]
}
Poznámka:
Pokud chcete vynutit řízení přístupu pro dotazy GraphQL při použití Tvůrce rozhraní Data API se službou Azure Cosmos DB, musíte použít direktivu @authorize v zadaném souboru schématu GraphQL. V případě mutací GraphQL a filtrů v dotazech GraphQL se však řízení přístupu stále vynucuje konfigurací oprávnění, jak je popsáno zde.
Zabezpečení na úrovni položek
Výrazy zásad databáze umožňují ještě více omezit výsledky. Zásady databáze překládají výrazy do predikátů dotazů spuštěných v databázi. Výrazy zásad databáze jsou podporovány pro následující akce:
- vytvořit
- číst
- aktualizace
- odstranit
Výstraha
Akce execute, která se používá s uloženými procedurami, nepodporuje politiky databáze.
Poznámka:
CosmosDB pro NoSQL v současné době nepodporuje pravidla databáze.
Další informace o zásadách databáze najdete v dokumentaci ke konfiguračnímu souboru .
Příklad
Zásady databáze, které omezují akci read na consumer roli, aby vracely pouze záznamy, kde název je "Ukázkový název".
{
"role": "consumer",
"actions": [
{
"action": "read",
"policy": {
"database": "@item.title eq 'Sample Title'"
}
}
]
}