Sdílet prostřednictvím


Role jazyka pravidel pro nároky

Jazyk pravidel deklarací identity v Active Directory Federation Services (AD FS) slouží jako základní administrativní komponenta pro správu chování příchozích a odchozích deklarací identity, zatímco motor pro zpracování deklarací identity funguje jako zpracovatelský motor pro logiku v jazyce pravidel deklarací identity, která definuje vlastní pravidlo. Další informace o tom, jak jsou všechna pravidla zpracovávána modulem pro zpracování nároků, naleznete v tématu Role modulu pro zpracování nároků.

Vytváření vlastních pravidel nároků pomocí jazyka nároků

Služba AD FS poskytuje správcům možnost definovat vlastní pravidla, která mohou použít k určení chování deklarací identity pomocí jazyka pravidel pro deklaraci identity. Pomocí příkladů syntaxe jazyka pravidel deklarací identity v tomto tématu můžete vytvořit vlastní pravidlo, které vytvoří výčet, přidá, odstraní a upraví deklarace identity tak, aby vyhovovaly potřebám vaší organizace. Vlastní pravidla můžete vytvořit zadáním syntaxe jazyka pravidel pro nároky v šabloně pravidla Odeslat nároky pomocí vlastní šablony pravidla pro nároky.

Pravidla jsou oddělená od sebe středníky.

Další informace o tom, kdy použít vlastní pravidla, naleznete v tématu Kdy použít vlastní pravidlo deklarace identity.

Použití šablon pravidel deklarací identity k získání informací o syntaxi jazyka pravidel deklarací identity

Služba AD FS také poskytuje sadu předdefinovaných šablon pravidel pro vystavování a přijímání deklarací, které můžete použít k implementaci běžných pravidel. V dialogovém okně Upravit pravidla deklarací identity pro danou důvěru můžete vytvořit předdefinované pravidlo a zobrazit syntaxi jazyka tohoto pravidla kliknutím na kartu Zobrazit syntaxi pravidla. Pomocí informací v této části a techniky Zobrazit jazyk pravidel můžete získat přehled o tom, jak vytvořit vlastní pravidla.

Podrobnější informace o pravidlech deklarací identity a šablonách pravidel deklarací najdete v tématu Role pravidel deklarací identity.

Porozumění součástem jazyka pravidel deklarací identity

Jazyk pravidel deklarace se skládá z následujících komponent, které jsou odděleny operátorem " =>":

  • Podmínka

  • Prohlášení o vydání

Podmínky

Podmínky v pravidle můžete použít ke kontrole vstupních deklarací identity a určení, jestli by měl být příkaz pravidla vykonán. Podmínka představuje logický výraz, který musí být vyhodnocen jako pravdivý, aby se mohla spustit část pravidla. Pokud tato část chybí, předpokládá se logická hodnota true; to znamená, že tělo pravidla se vždy spustí. Část podmínky obsahuje seznam podmínek, které jsou kombinovány za použití logického operátoru ("&&"). Všechny podmínky v seznamu musí být vyhodnoceny jako true, aby se celá podmíněná část vyhodnotila jako true. Podmínkou může být operátor pro výběr nároků nebo volání agregační funkce. Tyto dvě se vzájemně vylučují, což znamená, že selektory nároků a agregační funkce nelze kombinovat v jedné části podmínek pravidla.

Podmínky jsou volitelné v pravidlech. Například následující pravidlo nemá podmínku:

=> issue(type = "http://test/role", value = "employee");

Existují tři typy podmínek:

  • Jedna podmínka – jedná se o nejjednodušší formu podmínky. Kontroly jsou provedeny pouze pro jeden výraz; Například název účtu systému Windows = uživatel domény.

  • Více podmínek – tato podmínka vyžaduje další kontroly pro zpracování více výrazů v těle pravidla; Například název účtu systému Windows = uživatel domény a skupina = contosopurchasers.

Poznámka:

Existuje jiná podmínka, ale jedná se o podmnožinu jedné podmínky nebo více podmínek. Nazývá se podmínka regulárního výrazu (Regex). Používá se k převzetí vstupního výrazu a porovnávání výrazu s daným vzorem. Příklad, jak se dá použít, je znázorněno níže.

Následující příklady ukazují několik konstrukcí syntaxe, které jsou založené na typech podmínek, které můžete použít k vytvoření vlastních pravidel.

Jednoduché příklady -condition

Podmínky s jedním výrazem jsou popsány v následující tabulce. Jsou vytvořeny tak, aby jednoduše kontrolovaly nárok se zadaným typem nebo nárok se zadaným typem a hodnotou.

Popis podmínky Příklad syntaxe podmínky
Toto pravidlo má podmínku pro kontrolu vstupního nároku se zadaným typem nároku ("<http://test/name>"). Pokud je odpovídající deklarace identity ve vstupních deklaracích identity, pravidlo zkopíruje odpovídající deklaraci nebo deklarace identity do výstupní sady deklarací identity. c: [type == "http://test/name"] => issue(claim = c );
Toto pravidlo obsahuje podmínku pro kontrolu vstupního požadavku s určeným typem nároku ("<http://test/name>") a hodnotou, která musí být "Terry". Pokud je odpovídající deklarace identity ve vstupních deklaracích identity, pravidlo zkopíruje odpovídající deklaraci nebo deklarace identity do výstupní sady deklarací identity. c: [type == "http://test/name", value == "Terry"] => issue(claim = c);

Další podmínky -complex jsou uvedeny v další části, včetně podmínek pro kontrolu více nároků, podmínek pro kontrolu vydavatele nároku a podmínek pro kontrolu hodnot, které odpovídají vzoru regulárního výrazu.

Příklady více podmínek

Následující tabulka obsahuje příklad několika podmínek -expression.

Popis podmínky Příklad syntaxe podmínky
Toto pravidlo má podmínku pro kontrolu dvou vstupních deklarací identity, z nichž každý má zadaný typ deklarace identity ("<http://test/name>" a "<http://test/email>" ). Pokud jsou dva odpovídající nároky ve vstupních nárocích, pravidlo zkopíruje nárok na název do výstupní sady nároků. c1: [type == "http://test/name"] && c2: [type == "http://test/email"] => issue (claim = c1 );

Běžné příklady -condition

Následující tabulka obsahuje příklad podmínky regulárního výrazu -based.

Popis podmínky Příklad syntaxe podmínky
Toto pravidlo má podmínku, která používá regulární výraz ke kontrole e -mail claimu končícího na @fabrikam.com. Pokud se ve vstupních deklaracích najde odpovídající deklarace identity, pravidlo zkopíruje odpovídající deklaraci identity do výstupní sady deklarací identity. c: [type == "http://test/email", value =~ "^. +@fabrikam.com$" ] => issue (claim = c );

Prohlášení o vydání

Vlastní pravidla se zpracovávají na základě vydávacích příkazů (vystavení nebo doplnění), které programujete do pravidla žádosti. V závislosti na požadovaném výsledku může být do pravidla zapsána buď instrukce 'issue', nebo instrukce 'add', aby se naplnila vstupní sada nároků nebo výstupní sada nároků. Vlastní pravidlo, které používá příkaz add explicitně naplní hodnoty deklarací identity pouze do vstupní sady deklarací identity, zatímco vlastní pravidlo deklarace identity, které používá příkaz issue, naplní hodnoty deklarace ve vstupní sadě deklarací identity i ve výstupní sadě deklarací identity. To může být užitečné, pokud je hodnota tvrzení určena k použití pouze budoucími pravidly v souboru pravidel tvrzení.

Například na následujícím obrázku se příchozí nárok přidá do vstupní sady nároků modulem vystavování nároků. Při spuštění prvního vlastního pravidla deklarací identity a splnění kritérií uživatele domény modul vystavování deklarací identity zpracuje logiku v pravidle pomocí příkazu add a hodnota Editor se přidá do vstupní sady deklarací identity. Vzhledem k tomu, že hodnota Editoru je přítomna ve vstupní sadě nároků, pravidlo 2 může úspěšně zpracovat formulaci problému ve své logice a vygenerovat novou hodnotu Hello, která se přidá jak do výstupní, tak do vstupní sady nároků pro další použití pravidly v sadě pravidel. Pravidlo 3 může nyní použít všechny hodnoty, které jsou přítomné ve vstupní sadě tvrzení, jako vstupy pro zpracování své logiky.

role služby AD FS

Akce vydávání nároků

Tělo pravidla představuje akci vydání nároku. Jsou dvě akce vydávání prohlášení, které jazyk rozpoznává:

  • příkaz Prohlášení o problému: Příkaz vytváří tvrzení, které přejde do vstupní i výstupní sady tvrzení. Například následující příkaz vydá nový nárok na základě vstupní sady nároků:

    c:[type == "Name"] => issue(type = "Greeting", value = "Hello " + c.value);

  • Příkaz Add: Příkaz Add vytvoří nový nárok, který se přidá pouze do kolekce vstupní sady deklarací. Například následující příkaz přidá nový nárok do vstupní sady nároků:

    c:[type == "Name", value == "domain user"] => add(type = "Role", value = "Editor");

Zpráva o vydání pravidla definuje, jaké nároky budou vydány pravidlem při splnění podmínek. Existují dvě formy prohlášení týkající se argumentů a chování vyjádření:

  • Normální– Běžné pokyny k vydávání mohou vydávat nároky pomocí doslovných hodnot v pravidle nebo hodnoty z nároků, které splňují podmínky. Normální příkaz vystavení se může skládat z jednoho nebo obou následujících formátů:

    • Kopie nároku: Kopie nároku vytvoří kopii stávajícího nároku ve výstupní sadě nároků. Tento formulář vydání dává smysl jenom v kombinaci s prohlášením o vydání. Když se zkombinuje s příkazem pro vystavení "add", nemá žádný vliv.

    • Nová deklarace identity: Tento formát vytvoří novou deklaraci identity s ohledem na hodnoty pro různé vlastnosti deklarace identity. Typ nároku musí být specifikován; všechny ostatní vlastnosti nároku jsou nepovinné. Pořadí argumentů pro tento formulář je ignorováno.

  • úložiště atributů– Tento formulář vytvoří nároky s hodnotami načtenými z úložiště atributů. Je možné vytvořit více typů nároků pomocí jediného příkazu pro vydání, což je důležité pro úložiště atributů, která během načítání atributů provádějí vstupně-výstupní operace přes síť nebo disk. Proto je žádoucí omezit počet cest tam a zpět mezi modulem zásad a úložištěm atributů. Je také legální vytvořit více nároků pro daný typ nároku. Když úložiště atributů vrátí více hodnot pro daný typ deklarace identity, příkaz vystavení automaticky vytvoří deklaraci identity pro každou vrácenou hodnotu deklarace identity. Implementace úložiště atributů používá argumenty parametru k nahrazení zástupných symbolů v argumentu dotazu hodnotami zadanými v argumentech parametru. Zástupné symboly používají stejnou syntaxi jako funkce .NET String.Format ( ) (například {1}, {2}atd.). Pořadí argumentů pro tuto formu vystavení je důležité a musí se jednat o pořadí, které je předepsané v následující gramatikě.

Následující tabulka popisuje některé běžné konstrukce syntaxe pro oba typy výroků vydání v pravidlech nároků.

Typ prohlášení o vydání Popis příkazu vystavení Příklad syntaxe prohlášení o vydání
Normální Následující pravidlo vždy vygeneruje stejnou deklaraci identity vždy, když má uživatel zadaný typ a hodnotu deklarace identity: c: [type == "http://test/employee", value == "true"] => issue (type = "http://test/role", value = "employee");
Normální Následující pravidlo převede jeden typ nároku na jiný. Všimněte si, že hodnota nároku, která odpovídá podmínce "c", se používá v prohlášení o vystavení. c: [type == "http://test/group" ] => issue (type = "http://test/role", value = c.Value );
Úložiště atributů Následující pravidlo používá hodnotu příchozí deklarace identity k dotazování úložiště atributů služby Active Directory: c: [Type == "http://test/name" ] => issue (store = "Enterprise AD Attribute Store", types = ("http://test/email" ), query = ";mail;{0}", param = c.Value )
Úložiště atributů Následující pravidlo používá hodnotu příchozího nároku k dotazování SQL úložiště atributů, které bylo dříve nakonfigurované. c: [type == "http://test/name"] => issue (store = "Custom SQL store", types = ("http://test/email","http://test/displayname" ), query = "SELECT mail, displayname FROM users WHERE name ={0}", param = c.value );

Výrazy

Výrazy se používají na pravé straně jak pro omezení selektoru žádostí, tak pro parametry prohlášení o vydání. Jazyk podporuje různé druhy výrazů. Všechny výrazy v jazyce jsou založené na řetězci, což znamená, že jako vstup přebírají řetězce a vytvářejí řetězce. Čísla nebo jiné datové typy, například datum a čas, ve výrazech nejsou podporovány. Následují typy výrazů, které jazyk podporuje:

  • Řetězcový literál: Řetězcová hodnota oddělená znakem uvozovek (" ) na obou stranách.

  • Zřetězení řetězců výrazů: Výsledkem je řetězec, který je vytvořen zřetězením levých a pravých hodnot.

  • Volání funkce: Funkce je identifikována identifikátorem a parametry jsou předány jako čárka -delimited seznam výrazů uzavřených v závorkách (" ( )" ).

  • Přístup k vlastnosti nároku ve formě názvu proměnné TEČKA název vlastnosti: Výsledek hodnoty identifikované vlastnosti nároku pro dané hodnocení proměnné. Proměnná musí být nejprve svázána s výběrem nároků, než ji lze tímto způsobem použít. Je neplatné použít proměnnou, která je vázána na selektor deklarací v rámci omezení pro stejný selektor deklarací.

Pro přístup jsou k dispozici následující vlastnosti nároků:

  • Typ nároku

  • Nárok.Hodnota

  • Nárok.Vydavatel

  • Claim.OriginalIssuer

  • Claim.ValueType

  • Claim.Properties[property_name] (Tato vlastnost vrátí prázdný řetězec, pokud vlastnost property_name nebyla nalezena v kolekci vlastností nároku.)

Funkci RegexReplace můžete použít k volání uvnitř výrazu. Tato funkce přebírá vstupní výraz a odpovídá tomuto vzoru. Pokud se vzor shoduje, shodný výstup se nahradí náhradní hodnotou.

Existují nějaké funkce

Funkci Exists lze použít v podmínce k vyhodnocení, zda deklarace identity, která odpovídá podmínce, existuje ve vstupní sadě deklarací identity. Pokud existuje nějaký odpovídající nárok, prohlášení o vydání se zavolá pouze jednou. V následujícím příkladu je tvrzení "origin" vydáno přesně jednou – pokud je ve vstupní kolekci sady tvrzení alespoň jedno tvrzení, které má vystavitele nastaveného na "MSFT", bez ohledu na to, kolik tvrzení má vystavitele nastaveného na "MSFT". Použití této funkce zabraňuje vystavování duplicitních deklarací identity.

exists([issuer == "MSFT"])
   => issue(type = "origin", value = "Microsoft");

Tělo pravidla

Tělo pravidla může obsahovat pouze jeden příkaz pro vydání. Pokud se podmínky použijí bez použití funkce Exists, tělo pravidla se spustí pokaždé, když dojde ke shodě části podmínek.

Další odkazy

Vytvoření pravidla pro odesílání nároků pomocí vlastního pravidla