API pro připojení systému do Identity Managementu
Potřebujete napojit koncový systém na Identity Manager (IdM)? Váš spravovaný systém nemá API, chcete jej vytvořit? Zde máte jednoduchý příklad, zadání API pro připojení systému do Identity Managementu.
IdM na základě přidělení role uživateli založí účet a nastaví práva v napojeném systému. Při změně atributů identity IdM online propíše tyto změny do napojeného systému. Při odebrání role uživateli IdM okamžitě odstraní účet uživatele z napojeného systému.
Je třeba, aby takto napojovaný systém disponoval příslušným rozhraním. Je třeba znát význam a možné hodnoty všech atributů uživatele, které má IdM spravovat. Existuje několik možností, jak systém napojit.
K IdM je možné připojit libovolný systém, který je dostupný po síti a je zjistitelná jeho struktura identit. Pro správu uživatelských účtů, oprávnění a organizační struktury se využívají v identity manageru konektory.
Konektor je malý programový nástroj na straně IDM, který dovoluje výměnu dat s napojeným systémem pomocí jeho nativního API. Díky konektoru není třeba upravovat spravovaný systém. Snadnost napojení na koncový systém je obrovskou výhodou IdM. Seznam konektorů IdM bývá velmi rozsáhlý.
Nejčastěji používaná aplikační rozhraní konektory:
- Webové služby přes HTTPs:
- REST
- SOAP, popis v WSDL
- Přístup do databáze přes JDBC a práce s vystavenými view/procedurami
- Volání skriptů v operačním systému (SSH nebo PowerShell konektor)
Více zde: CzechIdM API – Requirements for connected system
Moderní cestou je využívání webových služeb. Typickým příkladem REST API pro správu identit je SCIM specifikace, která je navržena primárně pro cloud aplikace. Pro on-premise aplikace může být univerzálnost SCIM naopak nevýhodou z hlediska rychlosti.
Obecné požadavky na API na straně spravovaného systému:
- Každý účet je unikátně identifikován.
- API by nemělo přenášet vnitřní logiku správy uživatelských účtů ven z aplikace.
- Pokud je požadována synchronizace dat z napojeného systému do identity manageru, je vhodné podporovat detekci změn. Například formou časové značky u změněného objektu.
Webová služba typu SOAP
Aplikace, či systém disponuje SOAP nebo RESTful webovou službou, pomocí níž lze zakládat uživatele, aktualizovat atributy a oprávnění uživatele a smazat uživatele. Webová služba musí implementovat tyto metody:
-
getUser – načtení uživatele včetně všech jeho spravovaných atributů
-
findUser – vyhledávání uživatele dle libovolného ze spravovaných atributů (minimálně dle loginu)
-
listAllUsers – vrací seznam všech uživatelů v aplikaci
-
updateUser – aktualizace atributů uživatele. Musí podporovat přejmenování uživatele (podporuje-li to samotná aplikace). Jedním ze spravovaných atributů bude seznam oprávnění uživatele v aplikaci. V případě, že lze v aplikaci, či systému uživatele zablokovat nebo deaktivovat, musí to tato metoda pomocí zadání hodnoty atributu umožňovat.
-
deleteUser – smazání účtu uživatele
V případě, že bude systém sloužit zároveň jako zdroj informací o uživatelích (zdrojový systém), je nutné, aby implementoval metodu:
-
syncUsers – vrací seřazený seznam dvojic [identifikátor uživatele, časová známka poslední změny] uživatelských účtů, na nichž došlo ke změně od zadaného data v parametru metody. Řazení probíhá od nejstaršího změněného záznamu po nejnovější. Pokud na uživateli došlo od zadaného data k více změnám, metoda vrací pouze datum poslední změny. Je nutné vracet všechny výsledky najednou, nikoliv stránkovaně.
Je třeba, aby metody findUser a listAllUsers vracely všechny výsledky najednou, nikoliv stránkovaně. Na straně CzechIdM pak bude implementován konektor, který s touto webovou službou bude komunikovat. Konektor bude představovat klientskou část této webové služby. Serverová část bude implementována na straně napojované aplikace.
Níže jsou uvedeny požadavky na rozhraní webových metod pro komunikaci mezi CzechIdM a napojeným systémem nebo aplikací.
Datové struktury
Datová struktura UserAccount
-
používá se pro navrácení dat o daném uživateli z metody webové služby getUser,listUser,listAll
-
používá se pro aktualizaci dat u uživatele v napojeném systému z metody webové služby updateUser
-
atributy:
-
String userId – jednoznačný identifikátor uživatele (např. login, uid, distinguishedName)
-
List<Attribute> attributes – seznam atributů uživatele
-
Datová struktura Attribute
-
používá se pro reprezentaci uživatelského atributu
-
atributy:
-
String name – název atributu
-
Serializable value – hodnota atributu
-
Datová struktura FilterCriteria
-
používá se pro reprezentaci vyhledávacích kritérií pro vyhledávání uživatelů
-
atributy:
-
String Attribute – název atributu
-
Serializable value – hodnota atributu
-
Relation – relace („rovná se“, „obsahuje“, „začíná na“, „nerovná se“, „neobsahuje“, „nezačíná na“)
-
Datová struktura UserSync
-
používá se pro navracení dat webovou metodou syncUsers
-
atributy:
-
String userId – jednoznačný identifikátor uživatele (hash rodného čísla) (POVINNÝ ATRIBUT)
-
Timestamp modifTime – timestamp modifikace (POVINNÝ ATRIBUT)
-
Metody webové služby
Metoda findUsers
-
metoda vrací seznam celých uživatelských objektů, typ UserAccount, v napojeném systému nebo aplikaci, jejichž atributy odpovídají zadaným kritériím. Pokud jsou prázdná, metoda vrací identifikátory všech uživatelských účtů.
-
metoda vrátí všechny výsledky na jeden dotaz, nikoliv stránkovaně
-
VSTUP
-
List<FilterCriteria> filter – filtrovací kritéria
-
Pro vyhledání všech uživatelů pošli prázdný List
-
Mezi kritérii je logická vazba AND (tj. musí platit všechny současně)
-
-
-
VÝSTUP
-
List<String> result – vrací seznam celých uživatelských objektů, typ UserAccount
-
pokud žádný uživatel neexistuje, tak navrať prázdný List
-
-
-
CHYBOVÉ STAVY
-
zde žádné
-
metoda getUser
-
metoda pro načtení uživatele dle jednoznačného identifikátoru (login, uid, distinguishedName)
-
pokud má uživatel více pracovních úvazků, tak je bude tato metoda agregovat
-
LOGIKA
-
Metoda dohledá záznam uživatele pro dané ID
-
Metoda dohledá atributy tohoto uživatele
-
-
VSTUP
-
String userId – jednoznačný identifikátor uživatele
-
-
VÝSTUP
-
UserAccount user – navrácený objekt uživatele pro daný identifikátor
-
pokud žádný uživatel nebyl pro daný identifikátor nalezen, tak navrať NULL
-
-
-
CHYBOVÉ STAVY
-
zde žádné
-
metoda listAllUsers
-
metoda vrací seznam celých uživatelských objektů, typ UserAccount, v napojeném systému nebo aplikaci
-
metoda vrátí všechny výsledky na jeden dotaz, nikoliv stránkovaně
-
VSTUP
-
žádný
-
-
VÝSTUP
-
List<String> result – vrací seznam celých uživatelských objektů, typ typu UserAccount
-
pokud žádný uživatel neexistuje, tak navrať prázdný List
-
-
-
CHYBOVÉ STAVY
-
zde žádné
-
metoda updateUser
-
Metoda pro aktualizaci uživatele s daným jednoznačným identifikátorem.
-
Pokud je v atributech vyplněno heslo, metoda toto heslo nastaví uživateli na systému.
-
Metoda umožní přejmenovat uživatele nastavením nové hodnoty loginu pomocí atributu login v attributes.
-
Pokud je mezi atributy i seznam rolí/oprávnění uživatele na systému, metoda uživateli tato oprávnění nastaví.
-
Pokud je mezi atributy i atribut značící deaktivaci/blokaci účtu, metoda uživateli účet deaktivuje/zablokuje.
-
VSTUP
-
UserAccount userAccount – seznam objektů typu UserAccount
-
-
VÝSTUP
-
void – nic nenavrací
-
-
CHYBOVÉ STAVY
-
zde žádné
-
metoda deleteUser
-
metoda pro smazání s daným jednoznačným identifikátorem
-
VSTUP
-
String userId – jednoznačný identifikátor uživatele
-
-
VÝSTUP
-
void – nic nenavrací
-
-
CHYBOVÉ STAVY
-
List< BAPIRETURN1> BAPIRETURN1 – seznam objektů typu BAPIRETURN1
-
metoda syncUsers
-
Metoda pro načtení záznamů uživatelů, kteří byli aktualizováni od určitého data v minulosti do současnosti.
-
Metoda vrací všechny výsledky na jeden dotaz, nikoliv stránkovaně.
-
LOGIKA
-
Webová služba dostane na vstupu lastSyncDate
-
V auditním logu měněných záznamů dohledá uživatele, jimž se změnil některý z atributů od daného data do současnosti.
-
Pro dané uživatele určí jejich jednoznačný identifikátor a ten navrátí společně s datem modifikace (pokud jich je pro daného uživatele více, tak s tím nejstarším). Seznam je seřazen od nejstaršího záznamu po nejnovější.
-
-
VSTUP
-
Timestamp lastSyncDate – datum a čas od kterého se mají vyhledat účty uživatelů, jenž se od té doby změnily
-
-
VÝSTUP
-
List<UserSync> result – seznam objektů typu UserSync pro záznamy uživatelů, jenž se změnily, případně byly nově založeny
-
pokud žádný uživatel neexistuje, tak navrať prázdný List
-
-
-
CHYBOVÉ STAVY
-
zde žádné
-
Příklad: API pro agendový systém eSpis
Ukázka dostupných metod v API, webové služby SOAP poměrně rozšířeného agendového systému eSpis používaného na úřadech v ČR. API slouží pro správu uživatelských účtů zaměstnanců a jejich pracovních míst. Ukázka je typickým příkladem pro většinu napojovaných systémů.
Uživatelé
Jednoznačným identifikátorem uživatele v systému je login.
listEmployees
Metoda pro vylistování všech osob v systému
VSTUP:
- nic
VÝSTUP:
- seznam nalezených jednoznačných identifikátorů (login) osob (uloženo v poli nebo nějaké kolekci jako String)
getEmployee
Metoda pro načtení jedné entity “Osoby” podle ID
VSTUP:
- String ID – jednoznačný identifikátor osoby login
VÝSTUP
- všechny atributy evidované v systému pro danou osobu
- String Jméno
- String Příjmení
- String Login
- String Zkratka
- String Příslušnost ke spisovému uzlu
- String ID funkčního místa
- pokud nebyla nalezena entita s daným ID, vrátí NULL
createEmployee
Metoda pro založení jedné entity “Osoba”
VSTUP
- všechny atributy, které lze nastavit
- String Login
- String Jméno
- String Příjmení
- String Heslo
- String Zkratka
- String Příslušnost ke spisovému uzlu
- String ID funkčního místa
VÝSTUP
- String errorMessage – chybová zpráva, pokud se založení nezdařilo; v případě úspěchu NULL
updateEmployee
Metoda pro aktualizaci jedné entity “Osoba”
VSTUP
- String ID – jednoznačný identifikátor osoby
- všechny atributy, které lze nastavit
- String Login
- String Jméno
- String Příjmení
- String Heslo
- String Zkratka
- String Příslušnost ke spisovému uzlu
VÝSTUP
- String errorMessage – chybová zpráva, pokud se aktualizace nezdařila; v případě úspěchu NULL
deleteEmployee
Metoda pro odstranění jedné entity “Osoba” pomocí aktualizace příznaku platnosti
VSTUP
- String ID – jednoznačný identifikátor osoby
VÝSTUP
- String errorMessage – chybová zpráva, pokud se aktualizace nezdařila; v případě úspěchu NULL
Organizační struktura
Jednoznačným identifikátorem funkčních míst v systému je jejich název
listPositions
Metoda pro vylistování všech funkčních míst v systému
VSTUP: nic
VÝSTUP
- seznam jednoznačných identifikátorů (názvů) nalezených funkčních míst
getPosition
Metoda pro načtení jednoho funkčního místa
- String Název – identifikátor funkčního místa
- všechny atributy funkčního místa evidované v systému
- String Název
- String Zkratka
- String Obvod
- String Účetní okruh
- String Login uživatele
- String Role z katalogu práv
- String Instance práva (modul)
- String Agendová kniha
- pokud nebyla nalezena entita s daným ID, vrátí NULL
createPosition
Metoda pro založení jednoho funkčního místa
VSTUP
- String positionId – identifikátor funkčního místa
- všechny atributy, které bude funkční místo v systému potřebovat
- String Název
- String Zkratka
- String Obvod
- String Účetní okruh
- String Login uživatele
- String Role z katalogu práv
- String Instance práva (modul)
- String Agendová kniha
VÝSTUP
- String errorMessage – chybová zpráva, pokud se založení nezdařilo; v případě úspěchu NULL
updatePosition
- pro aktualizaci jednoho funkčního místa,
- pro přiřazení uživatele na dané funkční místo,
- pro přiřazení oprávnění funkčnímu místu.
- String Název – identifikátor funkčního místa
- všechny atributy, které bude funkční místo v systému potřebovat
- String Název
- String Zkratka
- String Obvod
- String Účetní okruh
- String Login uživatele
- String Role z katalogu práv
- String Instance práva (modul)
- String Agendová kniha
VÝSTUP
- String errorMessage – chybová zpráva, pokud se aktualizace nezdařila; v případě úspěchu NULL
deletePosition
- String positionId – identifikátor funkčního místa
- String errorMessage – chybová zpráva, pokud se aktualizace nezdařila; v případě úspěchu NULL
Závěr jak na API pro IdM?
Velkým přínosem IdM je snadnost připojení koncového systému bez nutnosti jeho přizpůsobení nebo dokonce i restartu. Možností napojení koncových systémů je mnoho. Někdy je vhodné naopak na straně koncového systému připravit univerzální API pro správu identit.
Výše zmíněný příklad je obecný pro většinu Identity Managerů.
Děkuji kolegům za podklady – Vláďovi Kotýnkovi, Zdendovi Burdovi a ostatním.
Mohlo by vás také zajímat:
Seriál o Identity Managementu:
- Co je to Identity Management?
- Jak vybrat IDM?
- Jak migrovat Identity Management?
- Modely spolupráce s dodavatelem IDM.
- Jak zabrátit vendor lock-in?
- Jak z personalistiky identifikovat vedoucího pro IDM?
- Jak se zbavit rutinních úkolů při správě IT systému automatizací Identity Managementu?
- Jak správně testovat IdM?
- Jak správně nasadit IDM do produktivního provozu?
- API pro připojení systému do IDM
- Co je to SCIM?
- IdM nebo formulářový systém?
- Netradiční využití IdM 1, 2, 3
O CzechIdM:
- Podporované konektory
- Základní funkce
- Seznam podporovaných konektorů
- Jak na samoregistraci a žádost o VPN?
- Jak na reset hesel z Windows? Password filtr
- Napojení JIP/KAAS.
- Správa MS-Acess.
- IdM a napojení Moodle
- Jak přidělovat licence o365.
- CzechIdM a Salesforce.