Kurz: Vývoj a plánování zřizování pro koncový bod SCIM v Azure Active Directory

Jako vývojář aplikací můžete použít rozhraní API pro správu uživatelů SCIM (System for Cross-Domain Identity Management) k povolení automatického zřizování uživatelů a skupin mezi vaší aplikací a Službou Azure AD (AAD). Tento článek popisuje, jak vytvořit koncový bod SCIM a integrovat ho se službou AAD zřizování. Specifikace SCIM poskytuje společné schéma uživatele pro zřizování. Při použití ve spojení s federačními standardy, jako je SAML nebo OpenID Připojení, poskytuje SCIM správcům koncové řešení pro správu přístupu založené na standardech.

Provisioning from Azure AD to an app with SCIM

SCIM je standardizovaná definice dvou koncových bodů: /Users koncového bodu a /Groups koncového bodu. Používá běžné příkazy REST k vytváření, aktualizaci a odstraňování objektů a předdefinované schéma pro běžné atributy, jako je název skupiny, uživatelské jméno, jméno, příjmení a e-mail. Aplikace, které nabízejí SCIM 2.0 REST API, mohou snížit nebo odstranit problémy při práci s proprietárním rozhraním API pro správu uživatelů. Každý klient SCIM dodržující předpisy například ví, jak do koncového bodu provést HTTP POST objektu /Users JSON, aby se vytvořila nová položka uživatele. Místo trochu jiného rozhraní API pro stejné základní akce mohou aplikace, které odpovídají standardu SCIM, okamžitě využívat stávající klienty, nástroje a kód.

Standardní schéma uživatelských objektů a rozhraní REST API pro správu definovaná v SCIM 2.0 (RFC 7642,7643,7644)umožňují snadněji vzájemnou integraci zprostředkovatelů identit a aplikací. Vývojáři aplikací, kteří sestavují koncový bod SCIM, se mohou integrovat s libovolným klientem kompatibilním s SCIM, aniž by museli dělat vlastní práci.

K automatizaci zřizování pro aplikaci bude potřeba sestavení a integrace koncového bodu SCIM s klientem SCIM Azure AD. Pomocí následujícího postupu můžete začít zřizovat uživatele a skupiny do vaší aplikace.

  1. Návrh schématu uživatelů a skupin

    Identifikujte objekty a atributy aplikace, abyste zjistili, jak se mapují na schéma uživatelů a skupin podporované AAD SCIM.

  2. Principy AAD SCIM

    Pochopte, jak AAD klienta SCIM pro modelování zpracování požadavků protokolu SCIM a odpovědí.

  3. Vytvoření koncového bodu SCIM

    Koncový bod musí být kompatibilní s SCIM 2.0, aby se integruje se službou AAD zřizování. Jako možnost můžete k sestavení koncového Common Language Infrastructure použít knihovny Microsoft Common Language Infrastructure (CLI) a ukázky kódu. Tyto ukázky jsou pouze pro referenci a testování. Doporučujeme je používat jako závislosti v produkční aplikaci.

  4. Integrace koncového bodu SCIM s AAD SCIM

    Pokud vaše organizace používá aplikaci třetí strany k implementaci profilu SCIM 2.0, který AAD podporuje, můžete rychle automatizovat zřizování i zrušení zřizování uživatelů a skupin.

  5. Publikování aplikace do galerie AAD aplikací

    Usnadňuje zákazníkům zjišťování vaší aplikace a snadnou konfiguraci zřizování.

Steps for integrating a SCIM endpoint with Azure AD

Návrh schématu uživatelů a skupin

Každá aplikace k vytvoření uživatele nebo skupiny vyžaduje jiné atributy. Spusťte integraci tím, že identifikujete požadované objekty (uživatele, skupiny) a atributy (jméno, manažer, pracovní místo atd.). které vaše aplikace potřebuje.

Standard SCIM definuje schéma pro správu uživatelů a skupin.

Základní schéma uživatele vyžaduje pouze tři atributy (všechny ostatní atributy jsou volitelné):

  • id, identifikátor definovaný poskytovatelem služby
  • userName– jedinečný identifikátor uživatele (obecně se mapuje na hlavní název uživatele Azure AD)
  • meta, meta pro čtení udržovaná poskytovatelem služeb

Kromě základního uživatelského schématu definuje standard SCIM rozšíření podnikového uživatele s modelem pro rozšíření uživatelského schématu tak, aby splňovalo potřeby vaší aplikace.

Pokud například vaše aplikace vyžaduje e-mail uživatele i manažera uživatele, použijte základní schéma ke shromáždění e-mailu uživatele a schématu podnikového uživatele ke shromažďování ’’’’’ manažera uživatele.

Pokud chcete navrhnout schéma, postupujte takto:

  1. Vypište atributy, které vaše aplikace vyžaduje, a potom kategorizujte jako atributy potřebné pro ověřování (např. loginName a e-mail), atributy potřebné ke správě životního cyklu uživatele (např. stav / aktivní) a všechny ostatní atributy potřebné k tomu, aby aplikace fungovala (např. manažer, značka).

  2. Zkontrolujte, jestli atributy už jsou definované ve schématu základního uživatele nebo podnikovém uživatelském schématu. Pokud ne, musíte definovat rozšíření uživatelského schématu, které pokrývá chybějící atributy. V následujícím příkladu najdete rozšíření pro uživatele, které umožňuje zřizování tag uživatele.

  3. Mapování atributů SCIM na atributy uživatele v Azure AD Pokud jeden z atributů, které jste definovali v koncovém bodu SCIM, nemá jasný protějšek ve schématu uživatele Azure AD, navedete správce tenanta, aby rozšířil jeho schéma nebo pro vlastnost používá atribut rozšíření, jak je znázorněno tags níže.

Požadovaný atribut aplikace Namapovaný atribut SCIM Namapovaný atribut Azure AD
Loginname userName userPrincipalName (Hlavní název uživatele)
firstName name.givenName givenName
lastName name.familyName Příjmení
workMail emails[type eq “ work ” ]. value Poštovní
manager manager manager
značka urn:ietf:params:scim:schemas:extension:CustomExtensionName:2.0:User:tag atribut extensionAttribute1
status active isSoftDeleted (vypočítaná hodnota není uložená na uživateli)

Příklad seznamu požadovaných atributů

{
     "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User",
      "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
      "urn:ietf:params:scim:schemas:extension:CustomExtensionName:2.0:User"],
     "userName":"bjensen@testuser.com",
     "id": "48af03ac28ad4fb88478",
     "externalId":"bjensen",
     "name":{
       "familyName":"Jensen",
       "givenName":"Barbara"
     },
     "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
     "Manager": "123456"
   },
     "urn:ietf:params:scim:schemas:extension:CustomExtensionName:2.0:User": {
     "tag": "701984",
   },
   "meta": {
     "resourceType": "User",
     "created": "2010-01-23T04:56:22Z",
     "lastModified": "2011-05-13T04:42:34Z",
     "version": "W\/\"3694e05e9dff591\"",
     "location":
 "https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646"
   }
}   

Příklad schématu definovaného datovou část JSON

Poznámka

Kromě atributů požadovaných pro aplikaci zahrnuje reprezentace JSON také požadované id atributy externalId , a meta .

Pomáhá kategorizovat mezi a a mapovat všechny výchozí atributy uživatele v Azure AD na DOKUMENT RFC SCIM. Podívejte se, jak se mapují přizpůsobit atributy mezi Azure AD a koncovým /User/Group bodem /User

Azure Active Directory uživatele "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
IsSoftDeleted active
Oddělení urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department
displayName displayName
Employeeid urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber
Facsimile-TelephoneNumber phoneNumbers[type eq "fax"].value
givenName name.givenName
jobTitle title
pošta emails[type eq "work"].value
mailNickname externalId
manager urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager
mobil phoneNumbers[type eq "mobile"].value
postalCode adresy [typ EQ "Work"]. postalCode
proxy – adresy e-maily [Type EQ "other"]. Osa
fyzické doručování – Office adresy [Type EQ "other"]. Formátu
streetAddress adresy [Type EQ "]. streetAddress
surname name.familyName
telefonní číslo phoneNumbers[type eq "work"].value
uživatel – hlavní userName

Příklad seznamu atributů uživatelů a skupin

skupina Azure Active Directory urn: IETF: parametry: SCIM: schemas: Core: 2.0: Group
displayName displayName
členy členy
objectId externalId

Příklad seznamu atributů skupin

Poznámka

Nemusíte podporovat uživatele i skupiny nebo všechny zobrazené atributy, je to jenom odkaz na to, jak se atributy ve službě Azure AD často mapují na vlastnosti v protokolu SCIM.

V dokumentu RFC SCIM je definováno několik koncových bodů. Můžete začít s /User koncovým bodem a pak ho odtud rozbalit.

Koncový bod Popis
/User Provádění operací CRUD u objektu uživatele.
/Group Proveďte operace CRUD u objektu skupiny.
/Schemas Sada atributů podporovaná jednotlivými klienty a poskytovatelem služeb se může lišit. Jeden poskytovatel služeb může zahrnovat name , title a emails , i když jiný poskytovatel služeb používá name , title a phoneNumbers . Koncový bod schémat umožňuje zjišťování podporovaných atributů.
/Bulk Hromadné operace umožňují provádět operace s velkou kolekcí objektů prostředků v rámci jedné operace (například členství v aktualizacích pro velkou skupinu).
/ServiceProviderConfig Obsahuje podrobné informace o funkcích podporovaného standardu SCIM, například o podporovaných zdrojích a metodě ověřování.
/ResourceTypes Určuje metadata o jednotlivých prostředcích.

Příklad seznamu koncových bodů

Poznámka

Použijte /Schemas koncový bod k podpoře vlastních atributů nebo pokud se schéma často mění, protože umožňuje klientovi, aby získal nejaktuálnější schéma automaticky. Použijte /Bulk koncový bod pro podporu skupin.

vysvětlení implementace AAD SCIM

v rámci podpory rozhraní API pro správu uživatelů SCIM 2,0 tato část popisuje, jak se implementuje klient služby AAD SCIM, a ukazuje, jak modelovat zpracování požadavků protokolu SCIM a odpovědi.

Důležité

Chování implementace Azure AD SCIM se naposledy aktualizovalo 18. prosince 2018. Informace o tom, co se změnilo, najdete v článku dodržování předpisů protokolu SCIM 2,0 ve službě Azure AD pro zřizování uživatelů.

V rámci specifikace protokolu SCIM 2,0musí vaše aplikace podporovat tyto požadavky:

Požadavek Referenční poznámky (protokol SCIM)
Vytváření uživatelů a volitelně také skupin oddíl 3,3
Úprava uživatelů nebo skupin s požadavky na opravu oddíl 3.5.2 Podpora zajišťuje, že skupiny a uživatelé jsou zřízeny způsobem.
Načtěte známý prostředek pro uživatele nebo skupinu, které jste vytvořili dříve. oddíl 3.4.1
Dotazování uživatelů nebo skupin oddíl 3.4.2. Ve výchozím nastavení jsou uživatelé načítáni pomocí id a dotazováni jejich username a a externalId skupiny jsou dotazovány nástrojem displayName .
Filter excludedAttributes = Members při dotazování na prostředek skupiny oddíl 3.4.2.5
přijměte jeden nosný token pro ověřování a autorizaci AAD k vaší aplikaci.
Obnovitelné odstranění uživatele active=false a obnovení uživatele active=true Objekt uživatele by měl být vrácen v požadavku bez ohledu na to, zda je uživatel aktivní. Jediným okamžikem, kdy by uživatel neměl být vrácen, je v případě, že je pevným smazán z aplikace.
Podpora koncového bodu/schemas oddíl 7 Koncový bod zjišťování schématu se použije ke zjištění dalších atributů.

Při implementaci koncového bodu SCIM použijte obecné pokyny pro zajištění kompatibility s AAD:

Obecné:
  • id je požadovaná vlastnost pro všechny prostředky. Každá odpověď, která vrací prostředek, by měla mít jistotu, že každý prostředek má tuto vlastnost, s výjimkou ListResponse členů s nulovými členy.
  • Odeslané hodnoty by měly být uloženy ve stejném formátu jako to, v jakém byly odeslány. Neplatné hodnoty by měly být odmítnuty s popisnou chybovou zprávou, která může být napadnutelná. K transformaci dat mezi daty odesílanými službou Azure AD a daty uloženými v aplikaci SCIM by nemělo dojít k transformaci dat. (např. telefonní číslo odeslané jako 55555555555 by se nemělo ukládat/vracet jako + 5 (555) 555-5555.)
  • V reakci na opravu není nutné zahrnout celý prostředek.
  • Pro strukturální prvky v SCIM nemusíte rozlišovat velká a malá písmena, zejména hodnoty operace opravy, jak je definováno v oddílu 3.5.2. AAD emituje hodnoty op jako op, replacea Remove.
  • Microsoft AAD dává žádost o načtení náhodného uživatele a skupiny, aby se zajistilo, že koncový bod a přihlašovací údaje jsou platné. Je také proveden jako součást toku testu připojení v Azure Portal.
  • Podporuje HTTPS na koncovém bodu SCIM.
  • vlastní složité a vícehodnotové atributy jsou podporovány, ale AAD nemá mnoho složitých datových struktur pro vyžádání dat z těchto případů. Jednoduché párové atributy typu název/hodnota lze namapovat na snadnou hodnotu, ale tok dat do složitých atributů se třemi nebo více podvlastnostmi není v současnosti podporován.
  • Hodnoty dílčího atributu type složitých atributů s více hodnotami musí být jedinečné. Například nelze použít dvě e-mailové adresy s podtypem Work.
Načítání prostředků:
Mohou
  • Atribut oprávnění není podporován.
  • Všechny atributy, které se považují za jedinečnosti uživatelů, musí být použitelné jako součást filtrovaného dotazu. (např. Pokud je vyhodnocena jedinečnost uživatele pro uživatelské jméno a e-maily [Type EQ "], musí mít příkaz GET na/Users s filtrem povoleno pro dotazování na uživatele" " a e-maily [Type EQ"). Value EQ " " .
Skupiny
  • Skupiny jsou volitelné, ale podporují se jenom v případě, že implementace SCIM podporuje žádosti o opravu .
  • pro účely porovnání Azure Active Directory a aplikace SCIM musí mít skupiny jedinečnost pro hodnotu displayname. Nejedná se o požadavek protokolu SCIM, ale je to požadavek na integraci služby SCIM s Azure Active Directory.
/Schemas (zjišťování schématu):
  • Ukázková žádost a odpověď
  • Zjišťování schématu se v současnosti nepodporuje u vlastní aplikace SCIM mimo galerii, ale používá se v některých aplikacích galerie. Až dál, zjišťování schématu se použije jako jediná metoda pro přidání dalších atributů do schématu existující aplikace SCIM galerie.
  • Pokud hodnota není k dispozici, neodesílají hodnoty null.
  • Hodnoty vlastností by měly být ve stylu CamelCase použita (např. v/v).
  • Musí vracet odpověď seznamu.
  • Požadavek na/schemas provede klient služby Azure AD SCIM pokaždé, když někdo uloží konfiguraci zřizování na webu Azure Portal nebo pokaždé, když uživatel zachová na stránce Upravit zřizování na portálu Azure Portal. Všechny další zjištěné atributy se budou nacházet pro zákazníky v mapování atributů v seznamu cílový atribut. Zjišťování schématu vede pouze k dalším cílovým atributům, které jsou přidány. Odstranění atributů nebude mít za následek odebrání atributů.

Zřizování a rušení uživatelů

následující ilustrace znázorňuje zprávy, které AAD posílá službě SCIM ke správě životního cyklu uživatele v úložišti identit vaší aplikace.

Shows the user provisioning and deprovisioning sequence
Pořadí zřizování a rušení zřizování uživatelů

Zřizování skupin a jejich rušení

Zřizování skupin a zrušení zřízení jsou volitelné. když se implementuje a povolí, na následujícím obrázku se zobrazí zprávy, které AAD posílá službě SCIM ke správě životního cyklu skupiny v úložišti identit vaší aplikace. Tyto zprávy se liší od zpráv o uživatelích dvěma způsoby:

  • Požadavky na načtení skupin určují, že atribut Members se má vyloučit z libovolného prostředku poskytnutého v reakci na požadavek.
  • Žádosti o zjištění, zda má atribut reference určitou hodnotu, jsou požadavky na atribut members.

Shows the group provisioning and deprovisioning sequence
Pořadí zřizování a rušení zřizování skupin

Požadavky a odpovědi protokolu SCIM

v této části najdete příklady požadavků SCIM vygenerovaných klientem nástroje AAD SCIM a příklady očekávaných odpovědí. Pro dosažení nejlepších výsledků byste měli kód aplikace, aby zpracovávala tyto požadavky v tomto formátu, a generovat očekávané odpovědi.

Důležité

informace o tom, jak a kdy služba zřizování uživatelů AAD emituje níže popsané operace, najdete v části cykly zřizování: počáteční a přírůstkové , jak zřizování funguje.

Uživatelské operace

Operace skupiny

Zjišťování schématu

Uživatelské operace

  • Na uživatele lze zadat dotaz pomocí userNameemails[type eq "work"] atributů nebo.

Vytvořit uživatele

Žádost

PO/Users

{
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User",
        "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"],
    "externalId": "0a21f0f2-8d2a-4f8e-bf98-7363c4aed4ef",
    "userName": "Test_User_ab6490ee-1e48-479e-a20b-2d77186b5dd1",
    "active": true,
    "emails": [{
        "primary": true,
        "type": "work",
        "value": "Test_User_fd0ea19b-0777-472c-9f96-4f70d2226f2e@testuser.com"
    }],
    "meta": {
        "resourceType": "User"
    },
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName"
    },
    "roles": []
}
Odpověď

HTTP/1.1 201 vytvořeno

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "48af03ac28ad4fb88478",
    "externalId": "0a21f0f2-8d2a-4f8e-bf98-7363c4aed4ef",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "userName": "Test_User_ab6490ee-1e48-479e-a20b-2d77186b5dd1",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_fd0ea19b-0777-472c-9f96-4f70d2226f2e@testuser.com",
        "type": "work",
        "primary": true
    }]
}

Získání uživatele

Žádost

ZÍSKAT/Users/5d48a0a8e9f04aa38008

Odpověď (uživatel se našla)

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "5d48a0a8e9f04aa38008",
    "externalId": "58342554-38d6-4ec8-948c-50044d0a33fd",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "userName": "Test_User_feed3ace-693c-4e5a-82e2-694be1b39934",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_22370c1a-9012-42b2-bf64-86099c2a1c22@testuser.com",
        "type": "work",
        "primary": true
    }]
}
Žádost

ZÍSKAT/Users/5171a35d82074e068ce2

Odpověď (uživatel nebyl nalezen. Všimněte si, že podrobnosti nejsou požadovány, pouze stav.)
{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:Error"
    ],
    "status": "404",
    "detail": "Resource 23B51B0E5D7AE9110A49411D@7cca31655d49f3640a494224 not found"
}

Získat uživatele podle dotazu

Žádost

ZÍSKAT/Users? Filter = userName EQ "Test_User_dfeef4c5-5681 -4387-B016-bdf221e82081"

Odpověď

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 1,
    "Resources": [{
        "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
        "id": "2441309d85324e7793ae",
        "externalId": "7fce0092-d52e-4f76-b727-3955bd72c939",
        "meta": {
            "resourceType": "User",
            "created": "2018-03-27T19:59:26.000Z",
            "lastModified": "2018-03-27T19:59:26.000Z"
            
        },
        "userName": "Test_User_dfeef4c5-5681-4387-b016-bdf221e82081",
        "name": {
            "familyName": "familyName",
            "givenName": "givenName"
        },
        "active": true,
        "emails": [{
            "value": "Test_User_91b67701-697b-46de-b864-bd0bbe4f99c1@testuser.com",
            "type": "work",
            "primary": true
        }]
    }],
    "startIndex": 1,
    "itemsPerPage": 20
}

Získat uživatele podle dotazů – žádné výsledky

Žádost

ZÍSKAT/Users? Filter = userName EQ "neexistující uživatel"

Odpověď

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 0,
    "Resources": [],
    "startIndex": 1,
    "itemsPerPage": 20
}

Aktualizace uživatele [vlastnosti s více hodnotami]

Žádost

Oprava/Users/6764549bef60420686bc HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
            {
            "op": "Replace",
            "path": "emails[type eq \"work\"].value",
            "value": "updatedEmail@microsoft.com"
            },
            {
            "op": "Replace",
            "path": "name.familyName",
            "value": "updatedFamilyName"
            }
    ]
}
Odpověď

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "6764549bef60420686bc",
    "externalId": "6c75de36-30fa-4d2d-a196-6bdcdb6b6539",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "userName": "Test_User_fbb9dda4-fcde-4f98-a68b-6c5599e17c27",
    "name": {
        "formatted": "givenName updatedFamilyName",
        "familyName": "updatedFamilyName",
        "givenName": "givenName"
    },
    "active": true,
    "emails": [{
        "value": "updatedEmail@microsoft.com",
        "type": "work",
        "primary": true
    }]
}

Aktualizace uživatele [vlastnosti s jednou hodnotou]

Žádost

Oprava/Users/5171a35d82074e068ce2 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Replace",
        "path": "userName",
        "value": "5b50642d-79fc-4410-9e90-4c077cdd1a59@testuser.com"
    }]
}
Odpověď

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "5171a35d82074e068ce2",
    "externalId": "aa1eca08-7179-4eeb-a0be-a519f7e5cd1a",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
        
    },
    "userName": "5b50642d-79fc-4410-9e90-4c077cdd1a59@testuser.com",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_49dc1090-aada-4657-8434-4995c25a00f7@testuser.com",
        "type": "work",
        "primary": true
    }]
}

Zakázání uživatele

Žádost

Oprava/Users/5171a35d82074e068ce2 HTTP/1.1

{
    "Operations": [
        {
            "op": "Replace",
            "path": "active",
            "value": false
        }
    ],
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ]
}
Odpověď
{
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
    ],
    "id": "CEC50F275D83C4530A495FCF@834d0e1e5d8235f90a495fda",
    "userName": "deanruiz@testuser.com",
    "name": {
        "familyName": "Harris",
        "givenName": "Larry"
    },
    "active": false,
    "emails": [
        {
            "value": "gloversuzanne@testuser.com",
            "type": "work",
            "primary": true
        }
    ],
    "addresses": [
        {
            "country": "ML",
            "type": "work",
            "primary": true
        }
    ],
    "meta": {
        "resourceType": "Users",
        "location": "/scim/5171a35d82074e068ce2/Users/CEC50F265D83B4530B495FCF@5171a35d82074e068ce2"
    }
}

Odstranění uživatele

Žádost

Odstranit/Users/5171a35d82074e068ce2 HTTP/1.1

Odpověď

HTTP/1.1 204 bez obsahu

Operace skupiny

  • Skupiny se vždy vytvoří s prázdným seznamem členů.
  • Do skupin lze zadat dotaz pomocí displayName atributu.
  • Aktualizace žádosti o opravu skupiny by měla v odpovědi vracet HTTP 204 bez obsahu . Vrácení textu se seznamem všech členů není vhodné.
  • Není nutné podporovat vrácení všech členů skupiny.

Vytvoření skupiny

Žádost

POST/Groups HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group", "http://schemas.microsoft.com/2006/11/ResourceManagement/ADSCIM/2.0/Group"],
    "externalId": "8aa1a0c0-c4c3-4bc0-b4a5-2ef676900159",
    "displayName": "displayName",
    "meta": {
        "resourceType": "Group"
    }
}
Odpověď

HTTP/1.1 201 vytvořeno

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
    "id": "927fa2c08dcb4a7fae9e",
    "externalId": "8aa1a0c0-c4c3-4bc0-b4a5-2ef676900159",
    "meta": {
        "resourceType": "Group",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
        
    },
    "displayName": "displayName",
    "members": []
}

Získání skupiny

Žádost

ZÍSKAT/Groups/40734ae655284ad3abcc? excludedAttributes = Members HTTP/1.1

Odpověď

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
    "id": "40734ae655284ad3abcc",
    "externalId": "60f1bb27-2e1e-402d-bcc4-ec999564a194",
    "meta": {
        "resourceType": "Group",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "displayName": "displayName",
}

Získat Group by DisplayName

Žádost

GET/Groups? excludedAttributes = Members Filter = DisplayName EQ "DisplayName" http/1.1

Odpověď

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 1,
    "Resources": [{
        "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
        "id": "8c601452cc934a9ebef9",
        "externalId": "0db508eb-91e2-46e4-809c-30dcbda0c685",
        "meta": {
            "resourceType": "Group",
            "created": "2018-03-27T22:02:32.000Z",
            "lastModified": "2018-03-27T22:02:32.000Z",
            
        },
        "displayName": "displayName",
    }],
    "startIndex": 1,
    "itemsPerPage": 20
}

Aktualizovat skupinu [atributy nečlenské]

Žádost

Oprava/Groups/fa2ce26709934589afc5 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Replace",
        "path": "displayName",
        "value": "1879db59-3bdf-4490-ad68-ab880a269474updatedDisplayName"
    }]
}
Odpověď

HTTP/1.1 204 bez obsahu

Aktualizace skupiny [přidat členy]

Žádost

Oprava/Groups/a99962b9f99d4c4fac67 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Add",
        "path": "members",
        "value": [{
            "$ref": null,
            "value": "f648f8d5ea4e4cd38e9c"
        }]
    }]
}
Odpověď

HTTP/1.1 204 bez obsahu

Skupina aktualizací [odebrat členy]

Žádost

Oprava/Groups/a99962b9f99d4c4fac67 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Remove",
        "path": "members",
        "value": [{
            "$ref": null,
            "value": "f648f8d5ea4e4cd38e9c"
        }]
    }]
}
Odpověď

HTTP/1.1 204 bez obsahu

Odstranění skupiny

Žádost

Odstranit/Groups/cdb1ce18f65944079d37 HTTP/1.1

Odpověď

HTTP/1.1 204 bez obsahu

Zjišťování schématu

Zjistit schéma

Žádost

ZÍSKAT/schemas

Odpověď

HTTP/1.1 200 OK

{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:ListResponse"
    ],
    "itemsPerPage": 50,
    "startIndex": 1,
    "totalResults": 3,
    "Resources": [
  {
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Schema"],
    "id" : "urn:ietf:params:scim:schemas:core:2.0:User",
    "name" : "User",
    "description" : "User Account",
    "attributes" : [
      {
        "name" : "userName",
        "type" : "string",
        "multiValued" : false,
        "description" : "Unique identifier for the User, typically
used by the user to directly authenticate to the service provider.
Each User MUST include a non-empty userName value.  This identifier
MUST be unique across the service provider's entire set of Users.
REQUIRED.",
        "required" : true,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "server"
      },                
    ],
    "meta" : {
      "resourceType" : "Schema",
      "location" :
        "/v2/Schemas/urn:ietf:params:scim:schemas:core:2.0:User"
    }
  },
  {
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Schema"],
    "id" : "urn:ietf:params:scim:schemas:core:2.0:Group",
    "name" : "Group",
    "description" : "Group",
    "attributes" : [
      {
        "name" : "displayName",
        "type" : "string",
        "multiValued" : false,
        "description" : "A human-readable name for the Group.
REQUIRED.",
        "required" : false,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none"
      },
    ],
    "meta" : {
      "resourceType" : "Schema",
      "location" :
        "/v2/Schemas/urn:ietf:params:scim:schemas:core:2.0:Group"
    }
  },
  {
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Schema"],
    "id" : "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
    "name" : "EnterpriseUser",
    "description" : "Enterprise User",
    "attributes" : [
      {
        "name" : "employeeNumber",
        "type" : "string",
        "multiValued" : false,
        "description" : "Numeric or alphanumeric identifier assigned
to a person, typically based on order of hire or association with an
organization.",
        "required" : false,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none"
      },
    ],
    "meta" : {
      "resourceType" : "Schema",
      "location" :
"/v2/Schemas/urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
    }
  }
]
}

Požadavky na zabezpečení

Verze protokolu TLS

Jedinými přijatelnými verzemi protokolu TLS jsou TLS 1,2 a TLS 1,3. Nejsou povoleny žádné jiné verze TLS. Není povolená žádná verze SSL.

  • Klíče RSA musí mít minimálně 2 048 bitů.
  • Klíče ECC musí být alespoň 256 bitů vygenerované pomocí schválené eliptické křivky.

Délky klíčů

Všechny služby musí používat certifikáty X. 509 generované pomocí kryptografických klíčů s dostatečnou délkou, což znamená:

Šifrovací sady

Všechny služby musí být nakonfigurovány tak, aby používaly následující šifrovací sady, v přesném pořadí uvedeném níže. Všimněte si, že pokud máte jenom certifikát RSA, nainstalovaná šifrovací sada ECDSA nemá žádný vliv.

Minimální pruh šifrovacích sad TLS 1,2:

  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

Rozsahy IP adres

Služba zřizování Azure AD aktuálně funguje pod rozsahy IP adres pro Azureactivedirectory selhala, jak je uvedeno tady. Rozsahy IP adres uvedené pod značkou Azureactivedirectory selhala můžete přidat, pokud chcete, aby byl do vaší aplikace povolený provoz ze služby zřizování Azure AD. Všimněte si, že budete muset pečlivě zkontrolovat seznam rozsahů IP adres pro vypočítané adresy. Adresa, jako je například ' 40.126.25.32 ', může být reprezentována v seznamu rozsahů IP adres jako ' 40.126.0.0/18 '. Seznam rozsahů IP adres můžete také programově načíst pomocí následujícího rozhraní API.

Azure AD taky podporuje řešení založené na agentech, které poskytuje připojení k aplikacím v privátních sítích (místně, hostované v Azure, hostované v AWS atd.). Zákazníci můžou nasadit odlehčeného agenta, který poskytuje připojení ke službě Azure AD bez nutnosti otevírat příchozí porty na serveru v privátní síti. Další informace najdete tady.

Vytvoření koncového bodu SCIM

Teď, když jste navrhli schéma a rozumíte implementaci Azure AD SCIM, můžete začít s vývojem koncového bodu SCIM. Místo začátku od nuly a sestavení implementace zcela na vlastní, můžete spoléhat na řadu open source knihoven SCIM, které publikovala komunita SCIM.

Pokyny k vytvoření SCIM koncového bodu, včetně příkladů, najdete v tématu vývoj ukázkového koncového bodu SCIM.

Vzorový ukázkový kód .NET Core, který je publikovaný týmem zřizování Azure AD, je jedním z takových prostředků, které můžou začít s vývojem. Po vytvoření SCIM koncového bodu ho budete chtít otestovat. Můžete použít kolekci předávacích testů , které jsou součástí referenčního kódu, nebo spustit prostřednictvím vzorových požadavků nebo odpovědí uvedených výše.

Poznámka

Referenční kód vám umožňuje začít vytvářet SCIM koncový bod a poskytuje "tak, jak je". Příspěvky z komunity jsou Vítá vás při sestavování a údržbě kódu.

Řešení se skládá ze dvou projektů, Microsoft. SCIM a Microsoft. SCIM. WebHostSample.

Projekt Microsoft. SCIM je knihovna, která definuje komponenty webové služby, které jsou v souladu se specifikací SCIM. Deklaruje rozhraní Microsoft. SCIM. IProvider, požadavky jsou přeloženy do volání metod poskytovatele s, které by bylo naprogramováno pro provoz v úložišti identit.

Breakdown: A request translated into calls to the provider's methods

projekt Microsoft. SCIM. WebHostSample je webová aplikace Visual Studio ASP.NET Core, která je založená na prázdné šabloně. to umožňuje, aby byl vzorový kód nasazen jako samostatný, hostovaný v kontejnerech nebo v rámci Internetová informační služba. Implementuje taky rozhraní Microsoft. SCIM. IProvider , které udržuje třídy v paměti jako ukázkové úložiště identit.

    public class Startup
    {
        ...
        public IMonitor MonitoringBehavior { get; set; }
        public IProvider ProviderBehavior { get; set; }

        public Startup(IWebHostEnvironment env, IConfiguration configuration)
        {
            ...
            this.MonitoringBehavior = new ConsoleMonitor();
            this.ProviderBehavior = new InMemoryProvider();
        }
        ...

Vytvoření vlastního koncového bodu SCIM

Služba SCIM musí mít adresu HTTP a certifikát ověřování serveru, u kterého je kořenová certifikační autorita jedním z následujících názvů:

  • CNNIC
  • Comodo
  • CyberTrust
  • DigiCert
  • Nedůvěra
  • GlobalSign
  • Přejít na Daddy
  • Společnost
  • WoSign
  • Kořenová certifikační autorita v čase X3

.NET Core SDK obsahuje certifikát pro vývoj HTTPS, který se dá použít během vývoje, certifikát se nainstaluje jako součást prvního spuštění prostředí. v závislosti na tom, jak spouštíte ASP.NET Core webové aplikace, bude naslouchat na jiném portu:

  • Microsoft. SCIM. WebHostSample: https://localhost:5001
  • IIS Express:https://localhost:44359/

Další informace o https v ASP.NET Core najdete na následujícím odkazu: Vynucení HTTPS v ASP.NET Core

Zpracování ověřování koncových bodů

Žádosti od Azure Active Directory obsahují bearer token OAuth 2.0. Každá služba, která požadavek obdrží, by měla ověřit vystavitele jako Azure Active Directory pro očekávaného Azure Active Directory tenanta.

V tokenu je vystavitel identifikován deklarací identity iss, například "iss":"https://sts.windows.net/cbb1a5ac-f33b-45fa-9bf5-f37db0fed422/" . V tomto příkladu základní adresa hodnoty deklarace identity identifikuje Azure Active Directory jako vystavitele, zatímco segment relativní adresy https://sts.windows.nethttps://sts.windows.netje jedinečný identifikátor tenanta Azure Active Directory, pro kterého byl token vystaven.

Cílovou skupinou tokenu bude ID šablony aplikace pro aplikaci v galerii. Každá aplikace zaregistrovaná v jednom tenantovi může dostat stejnou deklaraci identity s požadavky iss SCIM. ID šablony aplikace pro všechny vlastní aplikace je 8adf8e6e-67b2-4cf2-a259-e3dc5476c621. Token vygenerovaný službou zřizování Azure AD by se měl používat pouze k testování. Neměla by se používat v produkčních prostředích.

V ukázkovém kódu se požadavky ověřují pomocí balíčku Microsoft.AspNetCore.Authentication.JwtBearer. Následující kód vynucuje, aby se požadavky na některý z koncových bodů služby ověřoval pomocí bearer tokenu vydaného ’ Azure Active Directory pro zadaného tenanta:

        public void ConfigureServices(IServiceCollection services)
        {
            if (_env.IsDevelopment())
            {
                ...
            }
            else
            {
                services.AddAuthentication(options =>
                {
                    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                })
                    .AddJwtBearer(options =>
                    {
                        options.Authority = " https://sts.windows.net/cbb1a5ac-f33b-45fa-9bf5-f37db0fed422/";
                        options.Audience = "8adf8e6e-67b2-4cf2-a259-e3dc5476c621";
                        ...
                    });
            }
            ...
        }

        public void Configure(IApplicationBuilder app)
        {
            ...
            app.UseAuthentication();
            app.UseAuthorization();
            ...
       }

K použití poskytnutých postmanových testů a k provádění místního ladění pomocí localhost se vyžaduje také bearer token. Vzorový kód používá ASP.NET Core prostředí ke změně možností ověřování ve fázi vývoje a povolení použití tokenu podepsaného svým držitelem.

Další informace o více prostředích v ASP.NET Core najdete v tématu Použití více prostředí v ASP.NET Core.

Následující kód vynucuje, aby se požadavky na některý z koncových bodů služby ověřoval pomocí ’ bearer tokenu podepsaného vlastním klíčem:

public void ConfigureServices(IServiceCollection services)
{
    if (_env.IsDevelopment())
    {
        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters =
                new TokenValidationParameters
                {
                    ValidateIssuer = false,
                    ValidateAudience = false,
                    ValidateLifetime = false,
                    ValidateIssuerSigningKey = false,
                    ValidIssuer = "Microsoft.Security.Bearer",
                    ValidAudience = "Microsoft.Security.Bearer",
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("A1B2C3D4E5F6A1B2C3D4E5F6"))
                };
        });
    }
...

Odešlete do kontroleru tokenu požadavek GET pro získání platného bearerového tokenu. Metoda GenerateJSONWebToken zodpovídá za vytvoření tokenu odpovídajícího parametrům nakonfigurovaných pro vývoj:

private string GenerateJSONWebToken()
{
    // Create token key
    SymmetricSecurityKey securityKey =
        new SymmetricSecurityKey(Encoding.UTF8.GetBytes("A1B2C3D4E5F6A1B2C3D4E5F6"));
    SigningCredentials credentials =
        new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

    // Set token expiration
    DateTime startTime = DateTime.UtcNow;
    DateTime expiryTime = startTime.AddMinutes(120);

    // Generate the token
    JwtSecurityToken token =
        new JwtSecurityToken(
            "Microsoft.Security.Bearer",
            "Microsoft.Security.Bearer",
            null,
            notBefore: startTime,
            expires: expiryTime,
            signingCredentials: credentials);

    string result = new JwtSecurityTokenHandler().WriteToken(token);
    return result;
}

Zpracování zřizování a zrušení zřizování uživatelů

Příklad 1. Dotazování služby na odpovídajícího uživatele

Azure Active Directory (AAD) dotazuje službu na uživatele s hodnotou atributu odpovídající hodnotě atributu mailNickname uživatele v externalId AAD. Dotaz je vyjádřen jako požadavek HTTP (Hypertext Transfer Protocol), jako je tento příklad, kde jyoung je ukázka mailNickname uživatele v Azure Active Directory.

Poznámka

Toto je pouze příklad. Ne všichni uživatelé budou mít atribut mailNickname a hodnota, která uživatel nemá, nemusí být v adresáři jedinečná. Atribut používaný pro porovnávání (v tomto případě je ) je také možné konfigurovat v mapování externalIdexternalId.

GET https://.../scim/Users?filter=externalId eq jyoung HTTP/1.1
 Authorization: Bearer ...

Ve vzorového kódu se požadavek přeloží do volání metody QueryAsync poskytovatele ’ služeb. Tady je podpis této metody:

// System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
// Microsoft.SCIM.IRequest is defined in 
// Microsoft.SCIM.Service.  
// Microsoft.SCIM.Resource is defined in 
// Microsoft.SCIM.Schemas.  
// Microsoft.SCIM.IQueryParameters is defined in 
// Microsoft.SCIM.Protocol.  

Task<Resource[]> QueryAsync(IRequest<IQueryParameters> request);

V ukázkovém dotazu pro uživatele s danou hodnotou atributu jsou hodnoty argumentů předané externalId metodě QueryAsync následující:

  • Parametry. AlternateFilters.Count: 1
  • Parametry. AlternateFilters.ElementAt(0). AttributePath: "externalId"
  • Parametry. AlternateFilters.ElementAt(0). ComparisonOperator: ComparisonOperator.Equals
  • Parametry. AlternateFilter.ElementAt(0). ComparisonValue: "jyoung"

Příklad 2. Zřízení uživatele

Pokud odpověď na dotaz na webovou službu pro uživatele s hodnotou atributu, která odpovídá hodnotě atributu mailNickname uživatele, nevrátí žádné uživatele, pak AAD požádá službu o zřízení uživatele odpovídajícího uživateli v externalId AAD. Tady je příklad takového požadavku:

POST https://.../scim/Users HTTP/1.1
Authorization: Bearer ...
Content-type: application/scim+json
{
   "schemas":
   [
     "urn:ietf:params:scim:schemas:core:2.0:User",
     "urn:ietf:params:scim:schemas:extension:enterprise:2.0User"],
   "externalId":"jyoung",
   "userName":"jyoung@testuser.com",
   "active":true,
   "addresses":null,
   "displayName":"Joy Young",
   "emails": [
     {
       "type":"work",
       "value":"jyoung@Contoso.com",
       "primary":true}],
   "meta": {
     "resourceType":"User"},
    "name":{
     "familyName":"Young",
     "givenName":"Joy"},
   "phoneNumbers":null,
   "preferredLanguage":null,
   "title":null,
   "department":null,
   "manager":null}

Ve vzorového kódu se požadavek přeloží do volání metody CreateAsync poskytovatele ’ služeb. Tady je podpis této metody:

// System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
// Microsoft.SCIM.IRequest is defined in 
// Microsoft.SCIM.Service.  
// Microsoft.SCIM.Resource is defined in 
// Microsoft.SCIM.Schemas.  

Task<Resource> CreateAsync(IRequest<Resource> request);

V požadavku na zřízení uživatele je hodnota argumentu prostředku instancí třídy Microsoft.SCIM.Core2EnterpriseUser definovanou v knihovně Microsoft.SCIM.Schemas. Pokud je požadavek na zřízení uživatele úspěšný, očekává se, že implementace metody vrátí instanci třídy Microsoft.SCIM.Core2EnterpriseUser s hodnotou vlastnosti Identifikátor nastavenou na jedinečný identifikátor nově zřizoval uživatele.

Příklad 3. Dotazování na aktuální stav uživatele

Pokud chcete aktualizovat uživatele, o němž je známo, že existuje v úložiště identit s frontou SCIM, služba Azure Active Directory pokračuje vyžádáním aktuálního stavu tohoto uživatele ze služby pomocí požadavku, jako je například:

GET ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
Authorization: Bearer ...

Ve vzorového kódu se požadavek přeloží do volání metody RetrieveAsync poskytovatele ’ služeb. Tady je podpis této metody:

// System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
// Microsoft.SCIM.IRequest is defined in 
// Microsoft.SCIM.Service.  
// Microsoft.SCIM.Resource and 
// Microsoft.SCIM.IResourceRetrievalParameters 
// are defined in Microsoft.SCIM.Schemas 

Task<Resource> RetrieveAsync(IRequest<IResourceRetrievalParameters> request);

V příkladu požadavku na načtení aktuálního stavu uživatele jsou hodnoty vlastností objektu zadané jako hodnota argumentu parameters následující:

  • Identifikátor: 54D382A4-2050-4C03-94D1-E769F1D15682
  • SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"

Příklad 4. Dotazování na hodnotu referenčního atributu, který se má aktualizovat

Pokud se má aktualizovat atribut odkazu, dotazuje Azure Active Directory službu, aby určila, jestli aktuální hodnota referenčního atributu v úložiště identit předanou službou již odpovídá hodnotě tohoto atributu v Azure Active Directory. Pro uživatele je jediným atributem, jehož aktuální hodnota je dotazována tímto způsobem, atribut manager. Tady je příklad požadavku, který určuje, jestli atribut manager uživatelského objektu má aktuálně určitou hodnotu: Ve vzorových kódech se požadavek přeloží do volání metody QueryAsync poskytovatele ’ služeb. Hodnota vlastností objektu zadaná jako hodnota argumentu parameters je následující:

  • Parametry. AlternateFilters.Count: 2
  • Parametry. AlternateFilters.ElementAt(x). AttributePath: "ID"
  • Parametry. AlternateFilters.ElementAt(x). ComparisonOperator: ComparisonOperator.Equals
  • Parametry. AlternateFilter.ElementAt(x). ComparisonValue: "54D382A4-2050-4C03-94D1-E769F1D15682"
  • Parametry. AlternateFilters.ElementAt(y). AttributePath: "manager"
  • Parametry. AlternateFilters.ElementAt(y). ComparisonOperator: ComparisonOperator.Equals
  • Parametry. AlternateFilter.ElementAt(y). ComparisonValue: "2819c223-7f76-453a-919d-413861904646"
  • Parametry. RequestedAttributePaths.ElementAt(0): "ID"
  • Parametry. SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"

V této části může být hodnota indexu x 0 a hodnota indexu y může být 1 nebo hodnota x může být 1 a hodnota y může být 0 v závislosti na pořadí výrazů parametru dotazu filtru.

Příklad 5. Žádost o aktualizaci uživatele ze služby Azure AD do služby SCIM

Tady je příklad požadavku z Azure Active Directory do služby SCIM pro aktualizaci uživatele:

PATCH ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
Authorization: Bearer ...
Content-type: application/scim+json
{
    "schemas": 
    [
      "urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations":
    [
      {
        "op":"Add",
        "path":"manager",
        "value":
          [
            {
              "$ref":"http://.../scim/Users/2819c223-7f76-453a-919d-413861904646",
              "value":"2819c223-7f76-453a-919d-413861904646"}]}]}

Ve vzorového kódu se požadavek přeloží do volání metody UpdateAsync poskytovatele ’ služeb. Tady je podpis této metody:

// System.Threading.Tasks.Tasks and 
// System.Collections.Generic.IReadOnlyCollection<T>  // are defined in mscorlib.dll.  
// Microsoft.SCIM.IRequest is defined in
// Microsoft.SCIM.Service.
// Microsoft.SCIM.IPatch, 
// is defined in Microsoft.SCIM.Protocol. 

Task UpdateAsync(IRequest<IPatch> request);

V příkladu požadavku na aktualizaci uživatele má objekt zadaný jako hodnota argumentu patch tyto hodnoty vlastností:

Argument Hodnota
Identifikátor ResourceIdentifier.Identifier "54D382A4-2050-4C03-94D1-E769F1D15682"
ResourceIdentifier.SchemaIdentifier "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
(PatchRequest jako PatchRequest2). Operations.Count 1
(PatchRequest jako PatchRequest2). Operations.ElementAt(0). Název operace OperationName.Add
(PatchRequest jako PatchRequest2). Operations.ElementAt(0). Path.AttributePath "manager"
(PatchRequest jako PatchRequest2). Operations.ElementAt(0). Value.Count 1
(PatchRequest jako PatchRequest2). Operations.ElementAt(0). Value.ElementAt(0). Odkaz http://.../scim/Users/2819c223-7f76-453a-919d-413861904646
(PatchRequest jako PatchRequest2). Operations.ElementAt(0). Value.ElementAt(0). Hodnotu 2819c223-7f76-453a-919d-413861904646

Příklad 6. Zrušte zřízení uživatele.

Pokud chcete zrušte zřízení uživatele z úložiště identit s frontou služby SCIM, AAD odešle požadavek, například:

DELETE ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
Authorization: Bearer ...

Ve vzorového kódu se požadavek přeloží do volání metody DeleteAsync poskytovatele ’ služeb. Tady je podpis této metody:

// System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
// Microsoft.SCIM.IRequest is defined in 
// Microsoft.SCIM.Service.  
// Microsoft.SCIM.IResourceIdentifier, 
// is defined in Microsoft.SCIM.Protocol. 

Task DeleteAsync(IRequest<IResourceIdentifier> request);

Objekt zadaný jako hodnota argumentu resourceIdentifier má tyto hodnoty vlastností v příkladu požadavku na deaktivaci zřízení uživatele:

  • ResourceIdentifier.Identifier: "54D382A4-2050-4C03-94D1-E769F1D15682"
  • ResourceIdentifier.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"

Integrace koncového bodu SCIM s AAD SCIM

Službu Azure AD je možné nakonfigurovat tak, aby automaticky zřizuje přiřazené uživatele a skupiny pro aplikace, které implementují konkrétní profil protokolu SCIM 2.0. Specifika profilu jsou zdokumentovaná v článku Princip implementace Azure AD SCIM.

Informace o kompatibilitě s těmito požadavky najdete u poskytovatele aplikace nebo v dokumentaci k poskytovateli aplikací.

Důležité

Implementace Azure AD SCIM je postavená na službě zřizování uživatelů Azure AD, která je navržená tak, aby uživatele neustále synchronizovala mezi Azure AD a cílovou aplikací, a implementuje velmi specifickou sadu standardních operací. Je důležité porozumět těmto chováním, abyste porozuměli chování klienta SCIM služby Azure AD. Další informace najdete v části Cykly zřizování: Počáteční a přírůstkové v tématu Jak funguje zřizování.

Začínáme

Aplikace, které podporují profil SCIM popsaný v tomto článku, je možné připojit Azure Active Directory pomocí funkce aplikace mimo galerii v galerii aplikací Azure AD. Po připojení azure AD spustí proces synchronizace každých 40 minut, kdy se dotazuje koncového bodu SCIM aplikace na přiřazené uživatele a skupiny a vytvoří nebo upraví je podle podrobností přiřazení.

Připojení aplikace, která podporuje SCIM:

  1. Přihlaste se k AAD Portal. Upozorňujeme, že registrací do vývojářského programu Azure Active Directory získat přístup k bezplatné zkušební verzi pro Azure Active Directory s licencemi P2.

  2. V Enterprise podokně vyberte Další aplikace. Zobrazí se seznam všech nakonfigurovaných aplikací, včetně aplikací přidaných z galerie.

  3. Vyberte + Nová aplikace+ Vytvořit vlastní aplikaci.

  4. Zadejte název aplikace, zvolte možnost"integrate any other application you don't find in the gallery"(integrovat jakoukoli jinou aplikaci, kterou v galerii nenajdete), a vyberte Přidat a vytvořte objekt aplikace. Nová aplikace se přidá do seznamu podnikových aplikací a otevře se na obrazovce pro správu aplikací.

    Screenshot shows the Azure AD application galleryGalerie aplikací Azure AD

    Poznámka

    Pokud používáte staré prostředí galerie aplikací, postupujte podle pokynů na obrazovce níže.

    Screenshot shows the Azure AD old app gallery experienceStaré prostředí galerie aplikací Azure AD

  5. Na obrazovce správy aplikací vyberte na levém panelu Zřizování.

  6. V nabídce Režim zřizování vyberte Automatické.

    Example: An app's Provisioning page in the Azure portal
    Konfigurace zřizování v Azure Portal

  7. Do pole Adresa URL tenanta zadejte adresu URL koncového bodu SCIM aplikace. Příklad: https://api.contoso.com/scim/

  8. Pokud koncový bod SCIM vyžaduje bearer token OAuth od vystavitele jiného než Azure AD, zkopírujte požadovaný bearer token OAuth do volitelného pole Token tajného klíče. Pokud je toto pole prázdné, Azure AD obsahuje při každém požadavku bearer token OAuth vydaný službou Azure AD. Aplikace, které jako zprostředkovatele identity používají Azure AD, mohou tento token vystavený službou Azure AD ověřit.

    Poznámka

    Nedoporučuje se nechat toto pole prázdné a spoléhat se na token vygenerovaný službou Azure AD. Tato možnost je k dispozici především pro účely testování.

  9. Pokud chcete, aby se Azure Active Directory připojit ke koncovému bodu SCIM, vyberte Test připojení. Pokud se pokus nezdaří, zobrazí se informace o chybě.

    Poznámka

    Test Připojení se dotazuje koncového bodu SCIM na uživatele, který neexistuje, a jako odpovídající vlastnost vybranou v konfiguraci Azure AD používá náhodný identifikátor GUID. Očekávaná správná odpověď je HTTP 200 OK s prázdnou zprávou SCIM ListResponse.

  10. Pokud se pokus o připojení k aplikaci nezdaří, uložte výběrem možnosti Uložit přihlašovací údaje správce.

  11. V části Mapování jsou dvě sady mapování atributů, které lze vybrat:jednu pro uživatelské objekty a jednu pro objekty skupiny. Každou z nich vyberte, abyste si prohlédněte atributy, které se Azure Active Directory do vaší aplikace. Atributy vybrané jako Odpovídající vlastnosti se používají k porovnání uživatelů a skupin ve vaší aplikaci pro operace aktualizace. Výběrem možnosti Uložit potvrďte všechny změny.

    Poznámka

    Volitelně můžete zakázat synchronizaci objektů skupiny zakázáním mapování "skupin".

  12. V Nastavenípole Obor definuje, kteří uživatelé a skupiny se synchronizují. Pokud chcete synchronizovat jenom uživatele a skupiny přiřazené na kartě Uživatelé a skupiny, vyberte Synchronizovat jenom přiřazené uživatele a skupiny (doporučeno).

  13. Po dokončení konfigurace nastavte Stav zřizování na Hodnotu .

  14. Vyberte Uložit a spusťte službu zřizování Azure AD.

  15. Pokud synchronizujte jenom přiřazené uživatele a skupiny (doporučeno), nezapomeňte vybrat kartu Uživatelé a skupiny a přiřadit uživatele nebo skupiny, které chcete synchronizovat.

Po zahájení počátečního cyklu můžete na levém panelu vybrat Protokoly zřizování a sledovat průběh. Zobrazí se všechny akce, které služba zřizování provádí ve vaší aplikaci. Další informace o tom, jak číst protokoly zřizování Azure AD, najdete v tématu Vytváření sestav o automatickém zřizování uživatelských účtů.

Poznámka

Provedení počátečního cyklu trvá déle než pozdější synchronizace, ke kterým dochází přibližně každých 40 minut, pokud je služba spuštěná.

Pokud sestavíte aplikaci, kterou bude používat více než jeden tenant, můžete ji mít k dispozici v galerii aplikací Azure AD. To organizacím usnadňuje zjišťování aplikace a konfiguraci zřizování. Publikování aplikace v galerii Azure AD a zpřístupnění zřizování ostatním uživatelům je snadné. Postup najdete tady. Microsoft s vás bude spolupracovat na integraci vaší aplikace do naší galerie, otestování koncového bodu a dokumentaci k onboardingu verzí pro zákazníky.

Kontrolní seznam slouží k rychlému nasazení aplikace a zákazníci mají bezproblémové nasazení. Informace se od vás shromáždí při onboardingu do galerie.

  • Podpora koncového bodu uživatele a skupiny SCIM 2.0 (vyžaduje se jenom jeden, ale doporučuje se obojí)
  • Podpora alespoň 25 požadavků za sekundu na tenanta, aby se zajistilo, že uživatelé a skupiny budou zřízeni a zrušeni bez zpoždění (povinné)
  • Vytvoření technických kontaktů a kontaktů podpory, které povedou zákazníky při onboardingu v galerii (povinné)
  • 3 Testovací přihlašovací údaje pro vaši aplikaci, u které vyprší platnost (povinné)
  • Podpora udělení autorizačního kódu OAuth nebo dlouhodobého tokenu, jak je popsáno níže (povinné)
  • Zřídíte technický a kontaktní bod podpory pro podporu zákazníků po onboardingu v galerii (povinné).
  • Podpora zjišťování schémat (povinné)
  • Podpora aktualizace více členství ve skupinách pomocí jedné opravy PATCH
  • Veřejné dokumentování koncového bodu SCIM

Specifikace SCIM nedefinuje schéma pro ověřování a autorizaci specifické pro SCIM a spoléhá na použití stávajících oborových standardů.

Metoda autorizace Výhody Nevýhody Podpora
Uživatelské jméno a heslo (Azure AD ho nedoporučuje ani nepodporuje) Snadná implementace Nezabezpečené – na vašem $word pa$. Nepodporuje se u nových aplikací z galerie nebo aplikací mimo galerii.
Dlouhodobý bearer token Dlouhodobé tokeny nevyžadují přítomnost uživatele. Správci je mohou při nastavování zřizování snadno použít. Dlouhodobé tokeny může být obtížné sdílet se správcem bez použití nezabezpečených metod, jako je e-mail. Podporuje se pro aplikace z galerie i mimo galerii.
Udělení autorizačního kódu OAuth Přístupové tokeny jsou mnohem kratší než hesla a mají automatizovaný mechanismus aktualizace, který dlouhodobé bearer tokeny nemají. Při počáteční autorizaci musí být přítomný skutečný uživatel, a tím se přidá úroveň zodpovědnosti. Vyžaduje, aby byl k dispozici uživatel. Pokud uživatel organizaci opustí, token je neplatný a autorizaci bude potřeba dokončit znovu. Podporuje se pro aplikace z galerie, ale ne pro aplikace mimo galerii. Přístupový token však můžete poskytnout v uživatelském rozhraní jako token tajného klíče pro účely krátkodobého testování. Podpora udělení kódu OAuth pro jiné uživatele než v galerii je v našem backlogu, kromě podpory konfigurovatelných adres URL pro ověřování a tokeny v aplikaci galerie.
Udělení přihlašovacích údajů klienta OAuth Přístupové tokeny jsou mnohem kratší než hesla a mají automatizovaný mechanismus aktualizace, který dlouhodobé bearer tokeny nemají. Udělení autorizačního kódu i přihlašovací údaje klienta vytvářejí stejný typ přístupového tokenu, takže přesun mezi těmito metodami je pro rozhraní API transparentní. Zřizování je možné zcela automatizovat a nové tokeny je možné bezobslužně vyžádat bez zásahu uživatele. Nepodporuje se pro galerie a aplikace mimo galerii. Podpora je v našem backlogu.

Poznámka

Nedoporučujeme ponechat pole tokenu prázdné v uživatelském rozhraní vlastní aplikace AAD konfigurace zřizování. Vygenerovaný token je k dispozici především pro účely testování.

Tok udělení kódu OAuth

Zřizovací služba podporuje udělení autorizačního kódu a po odeslání žádosti o publikování vaší aplikace v galerii s vás náš tým bude spolupracovat na shromáždění následujících informací:

  • Autorizační adresaURL – adresa URL klienta, která získá autorizaci od vlastníka prostředku prostřednictvím přesměrování uživatelského agenta. Uživatel je přesměrován na tuto adresu URL, aby autorizuje přístup.

  • Adresa URL výměny tokenů– adresa URL klienta, která vymění udělení autorizace pro přístupový token, obvykle s ověřováním klienta.

  • ID klienta– autorizační server vydá zaregistrovanému klientovi identifikátor klienta, což je jedinečný řetězec představující registrační informace poskytnuté klientem. Identifikátor klienta není tajný kód. je vystavený vlastníkovi prostředku a nesmí se používat samostatně pro ověřování klientů.

  • Tajný klíčklienta – tajný kód vygenerovaný autorizačním serverem, který by měl být jedinečnou hodnotou známou pouze autorizačním serverem.

Poznámka

Autorizační adresu URL a adresu URL výměny tokenů v současné době není možné konfigurovat pro jednoho tenanta.

Poznámka

OAuth v1 se nepodporuje kvůli odhalení tajného klíče klienta. Podporuje se OAuth v2.

Osvědčené postupy (doporučené, ale nepožadované):

  • Podpora více adres URL pro přesměrování Správci můžou zřizování konfigurovat z "portal.azure.com" i "aad.portal.azure.com". Podpora více adres URL pro přesměrování zajistí, že uživatelé budou moci autorizovat přístup z obou portálů.
  • Podpora více tajných kódů pro snadné prodloužení platnosti bez výpadků

Nastavení toku udělení kódu OAuth

  1. Přihlaste se k Azure Portal, přejděte do části Enterprise Application Provisioning (Zřizováníaplikací) a vyberte Authorize (Autorizovat).

    1. Azure Portal přesměruje uživatele na autorizační adresu URL (přihlašovací stránku aplikace třetí strany).

    2. Správce poskytne aplikaci třetí strany přihlašovací údaje.

    3. Aplikace třetí strany přesměruje uživatele zpět na Azure Portal a poskytne kód pro udělení oprávnění.

    4. Zřizovací služby Azure AD zavolá adresu URL tokenu a poskytne kód pro udělení. Aplikace třetí strany odpoví přístupový token, obnovovací token a datum vypršení platnosti.

  2. Po zahájení cyklu zřizování služba zkontroluje, jestli je aktuální přístupový token platný, a v případě potřeby ho vymění za nový token. Přístupový token se poskytuje v každé žádosti zadané do aplikace a platnost žádosti se kontroluje před každým požadavkem.

Poznámka

I když není možné nastavit OAuth v aplikacích mimo galerii, můžete ručně vygenerovat přístupový token z autorizačního serveru a zadat ho jako token tajného kódu do aplikace mimo galerii. To vám umožní ověřit kompatibilitu serveru SCIM s klientem SCIM AAD před onboardingem do galerie aplikací, která podporuje udělení kódu OAuth.

Dlouhodobé bearerové tokeny OAuth: Pokud vaše aplikace nepodporuje tok udělení autorizačního kódu OAuth, vygenerování dlouhodobého bearer tokenu OAuth, který může správce použít k nastavení integrace zřizování. Token by měl být časově trvalý, jinak se úloha zřizování po vypršení platnosti tokenu v karanténě.

Pokud chcete další metody ověřování a autorizace, dejte nám vědět na UserVoice.

Pokud chcete zvýšit povědomí o naší společné integraci a poptávku po této integraci, doporučujeme aktualizovat stávající dokumentaci a zesílit integraci v marketingových kanálech. Níže je uvedená sada aktivit kontrolního seznamu, které doporučujeme dokončit pro podporu spuštění.

  • Zajistěte, aby týmy podpory prodeje a zákaznické podpory měly informace, byly připravené a mohli s funkcemi integrace mluvit. Zkrátte své týmy, poskytte jim nejčastější dotazy a zahr te integraci do svých prodejních materiálů.
  • Vytvořit blogový příspěvek nebo tisková zprávu popisující společnou integraci, výhody a způsob, jak začít. Příklad: Imprivata a Azure Active Directory Press Release
  • Využijte sociální média, jako je Twitter, Facebook nebo LinkedIn, k propagaci integrace pro vaše zákazníky. Nezapomeňte ho @AzureAD zahrnout, abychom mohli váš příspěvek znovu otevřít. Příklad: Příspěvek na Twitteru Imprivata
  • Vytvoření nebo aktualizace marketingových stránek nebo webových stránek (např. stránky integrace, stránky partnera, stránky s cenami atd.) , aby zahrnovala dostupnost společné integrace. Příklad: Stránka integrace Pingboard,stránka integrace Smartsheet,Monday.com s cenami
  • Vytvořte článek centra nápovědy nebo technickou dokumentaci o tom, jak můžou zákazníci začít. Příklad: Envoy + Microsoft Azure Active Directory integrace.
  • Upozorní zákazníky na novou integraci prostřednictvím komunikace se zákazníky (měsíční bulletiny, e-mailové kampaně, poznámky k verzi produktu).

Další kroky

Vývoj ukázkovéhokoncového bodu SCIM Automate user provisioning anddeprovisioning to SaaS appsCustomizeattribute mappings for user provisioningWriting expressions for attribute mappingScopingfilters for user provisioningAccount provisioning notificationsSeznam kurzů integrace aplikacíSaaS