IDM v1

AsyncAPI standard

AsyncAPI json definice ke stažení zde

Základní popis rozhraní Identity management (dále IDM) využívá k příjmu a zasílání zpráv message brokera RabbitMQ implementujícího protokol AMQP pro exchange a queue a protokol Binary pro superstreamy. IDM slouží ke kompletní správě identit, který zahrnuje tyto entity: osoby, uživatele, mandáty a číselník mandátů.

Klienti zasílají zprávy na definovaný vstupní exchange IDM_Request, který je společný pro všechny klienty.

  1. K autentizaci a autorizaci klientského volání slouží klientský certifikát použitý k navázání spojení s message brokerem. Požadavky na klientský certifikát jsou stanoveny níže. Různé implementace klientského systému budou ověřeny svým klientským certifikátem.
  2. K validaci těla požadavku dle JSON schématu dojde až při předání a zpracování importní dávky aplikační logikou IDM.

Klienti mají dále možnost vyčítat jednotlivé entity pomocí definované Queue IDM_Events_$KodExtSys.

  1. K autentizaci a autorizaci klientského volání slouží klientský certifikát použitý k navázání spojení s message brokerem. Požadavky na klientský certifikát jsou stanoveny níže. Různé implementace klientského systému budou ověřeny svým klientským certifikátem.

Klienti mají dále možnost jednorázové synchronizace dat pomocí definované Queue IDM_Synchro_$KodExtSys.

  1. K autentizaci a autorizaci klientského volání slouží klientský certifikát použitý k navázání spojení s message brokerem. Požadavky na klientský certifikát jsou stanoveny níže. Různé implementace klientského systému budou ověřeny svým klientským certifikátem.

Klienti mají dále možnost vyčítat jednotlivé entity pomocí definovaného Superstreamu IDM_Events_Superstram.

  1. K autentizaci a autorizaci klientského volání slouží klientský certifikát použitý k navázání spojení s message brokerem. Požadavky na klientský certifikát jsou stanoveny níže. Různé implementace klientského systému budou ověřeny svým klientským certifikátem.

Klienti mají dále možnost jednorázové synchronizace dat pomocí definovaného Superstreamu IDM_Synchro_Superstram.

  1. K autentizaci a autorizaci klientského volání slouží klientský certifikát použitý k navázání spojení s message brokerem. Požadavky na klientský certifikát jsou stanoveny níže. Různé implementace klientského systému budou ověřeny svým klientským certifikátem.
Technická specifikace message brokera
Postup vytvoření certifikátu
  1. Správce externího systému vygeneruje privátní klíč s RSA 4096
    Návod k vygenerování

  2. Správce externího systém vygeneruje CSR soubor (certificate singing request) podepsaný privátním klíčem viz bod 1
    Návod k vygenerování

  3. Správce externího systému předá vygenerovaný CSR soubor provozovateli NIPEZ prostřednictvím ServiceDesku NIPEZ. Provozovatel NIPEZ podepíše CSR soubor interní certifikační autoritou NIPEZ a předá zpět správci externího systému. Pro aktualizaci certifikátu je nutné postupovat dle Aktualizace certifikátu

  4. Správce externího systému si spáruje předaný certifikát se svým privátním klíčem. Takto vzniklý certifikát je připraven pro komunikaci s rozhraním message brokera.
    Návod ke spárování

Pravidla pro potvrzení přečtení zpráv z fronty 🚩

Pravidla pro potvrzení zpracování zpráv vychází ze standardu samotného protokolu AMQP viz odkaz . Níže jsou popsány spravné možnosti jak potvrdit přijetí zprávy.

  1. Úspěšné přijetí a zpracování zprávy potvrdí externí systém ACK

  2. Pokud zprávu nelze zpracovat ani při opětovném stažení zprávy např. z důvodu její nevalidity, zpráva se odmítne NACK s parametrem requeue = false

  3. Na neúspěšné zpracování zprávy z důvodu dočasného problému na straně externího systému lze reagovat dvěma způsoby:

    3.1. Žádná odpověd: Externí systém má 30 minut na potvrzení zpracování zprávy. Pokud do tohoto limitu nedojde k potvrzení nebo zamítnutí zpracování zprávy, dojde k odpojení externího systému a nepotvrzená zpráva se vrací do původní fronty, odkud ji lze po opětovném připojení znovu vyčíst. (tento časový limit je nakonfigurován na straně message brokera - jako tzv. consumer timeout).

    3.2. Dočasné odmítnutí: Externí systém může zpracování zprávy odmítnout NACK s parametrem requeue = true. Je vhodné na straně externího systému zpracování zprávy pozdržet a odmítnout až po určité časové prodlevě. V případě, že dojde k takovému odmítnutí, zpráva je ihned opětovně zařazena do původní fronty. Limit na počet opakovaní čtení zprávy je nastaven na straně message brokera pomocí delivery limit na hodnotu 20 pokusů.

Pravidla pro připojení k jednotlivým superstreamům 🚩

Jednotlivé streamy jsou implementovány až v N instancích a vždy jsou indexovány od 0. Superstreamy využívají Binary protokol, pro který je potřeba implementovat dll viz odkaz.

Instance IDM_Events_Superstream

  • IDM_Events_Superstream-0
  • IDM_Events_Superstream-1
  • IDM_Events_Superstream-2

Instance IDM_Synchro_Superstream

  • IDM_Synchro_Superstream-0
  • IDM_Synchro_Superstream-1
  • IDM_Synchro_Superstream-2

Kompletní kód pro správně nakonfigurovaného klienta v roli consumera superstreamů je ke stažení zde. Pro správnou funknčnost je potřeba validní konfigurace těchto parametrů:

  • Povolení SuperStream konzumace - automaticky napojí 1 consumera na každý dílčí stream
    IsSuperStream = true
  • Povolení Single Active Consumer (SAC) - pouze jeden consumer na dílčí stream je aktivní. Tento parametr zajišťuje zaručené pořadí doručení jednotlivých zpráv.
    IsSingleActiveConsumer = true
  • SAC skupina = $KodExtSys - Jedná se o skupinu klientů (nodes), kteří zajišťují komunikaci pro jednoho klienta/mikroslužbu. Zajišťuje vysokou prostupnost.
    Reference = $KodExtSys
  • V rámci každé single active consumer skupiny je pro každý dílčí stream na straně serveru uložen Offset, který indikuje poslední staženou zprávu z dílčího streamu. Pokud klient navazuje spojení poprvé, připojí se na začátek streamu (new OffsetTypeFirst()). Pokud už byl někdy ke streamu připojen, získá aktuální hodnotu Offsetu pro svou SAC skupinu a pokračuje od aktuálního Offsetu (new OffsetTypeOffset()). Klient musí Offset pravidelně aktualizovat, doporučujeme interval 1 minuty (není možné Offset aktualizovat po každé přijaté zprávě, jelikož by došlo k zahlcení jednotlivých streamů).

Pro podrobnější informace jak vytvořit consumera pro čtení jednotlivých streamů příkládáme RabbitMQ dokumentaci.

Verzování 🚧

Verze budou postupně inkrementovány a budou k dispozici současně vždy maximálně 2 verze:

  • Aktuální verze
  • Předchozí verze, pokud prozatím neuplynula doba stanovená pro adaptaci aktuální verze.

Číslování verzí odpovídá specifikaci SemVer, tedy:

  • první číslo(major) se mění pokud jsou do api přidány nekompatibilní změny. (Se změnou se vydává nová verze a aktuální se označí jako předchozí, avšak stále bude k dispozici)
  • druhé číslo(minor) se mění pokud jsou do api předány změny, které jsou plně kompatibilní (Není třeba vytvářet novou verzi, jelikož jsou změn kompatibilní)
  • třetí číslo(patch) obsahuje opravy chyb (Opravy chyb jsou vždy přidány jak do aktuální tak předchozí verze)

Seznam změn 🚀

Aktuální verze

1.4.4

✨ Přidáno

  • Rozšíření zprávy IDM_Mandaty o zdrojMandatu - pouze při vyčítání dané zprávy

🔧 Změněno

  • Formát datumVzniku a datumZaniku u zprávy IDM_Mandaty

Předchozí verze

seznam verzí
1.4.3

✨ Přidáno

  • Rozšíření zprávy IDM_CiselnikMandatu o typ - Obecne
  • Rozšíření zprávy IDM_Osoby o typ osoby
  • Rozšíření zprávy IDM_Uzivatele o typ uživatele

1.4.2

✨ Přidáno

  • Rozšíření zprávy IDM_Osoby o cisloPopisne a cisloOrientacni
  • Minimální délka pro hodnotu ico u zprávy IDM_Osoby

🔧 Změněno

  • Formát pravniForma a ulice u zprávy IDM_Osoby

1.4.1

🔧 Změněno

  • Aktualizovaný seznam Headers zasílaných u zpráv pro jednotlivé typy fronty - Quorum a Superstream

✨ Přidáno

  • Detailnější popis vytvoření klienta v roli consumera pro čtení jednotlivých Superstreamů

1.4.0

🔧 Změněno

  • Formát statniObcanstvi u zprávy IDM_Uzivatele
  • Formát zeme u zprávy IDM_Osoby

✨ Přidáno

  • Napojení na jednotlivé Superstreamy

1.3.0

🔧 Změněno

  • Opravena malá písmena u vhostu

1.2.0

🔧 Změněno

  • Doplnění pravidel párování osoby o strukturu typOsoby při použití jiného identifikátoru než nipezIdOsoby

✨ Přidáno

  • Zpráva IDM_Mandaty - Rozšířena o strukturu nipezIdObjektuRVZ

🗑️ Odebráno

  • Zpráva IDM_Mandaty - Odebrána struktura evidencniCisloVZ

1.1.1

🔧 Změněno

  • Zjednodušení struktury dokumentace - změna popisu operací

1.1.0

✨ Přidáno

  • Zprávy IDM_Osoby a IDM_Mandaty - Rozšířeny o identifikaceOsoby, která nově obsahuje:
    • typOsoby
    • ico
    • dalsiRozliseni
    • nipezIdOsoby

🔧 Změněno

  • Zprávy IDM_Osoby a IDM_Mandaty - Nově obsahují údaj ico zanořený v identifikaceOsoby
  • Zpráva IDM_Mandaty - Odstraněna povinnost údaje nipezIdUzivatele
1.0.0

První publikovaná verze API.

Servers

  • amqps://esb.nipez.cz:5671/IDM/amqps 0.9.1 a 1.0 (TLS)RabbitMQ_Cluster_Quorum

    RabbitMQ_Cluster_Quorum server

    Security:
    • X509:

      Certifikát pro autentizaci k message brokeru.
      Hodnota CN - Common name musí odpovídat $KodExtSys_$Prostredi. Pro produkční prostředí se _$Prostredi neuvádí.
      Certifikát musí být vystaven interní certifikační autoritou NIPEZ.

  • binary://esb.nipez.cz:5551/IDM/binaryRabbitMQ_Cluster_Superstream

    RabbitMQ_Cluster_Superstream server

    Security:
    • X509:

      Certifikát pro autentizaci k message brokeru.
      Hodnota CN - Common name musí odpovídat $KodExtSys_$Prostredi. Pro produkční prostředí se _$Prostredi neuvádí.
      Certifikát musí být vystaven interní certifikační autoritou NIPEZ.

Operations

  • SEND IDM_Request

    Operation IDIDM_Request

    Available only on servers:

    object

    Accepts one of the following messages:

    • #0IDM_Osoby
      Message IDIDM_Osoby
      object

      Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

      • PO - Právnická osoba: typOsoby, ico
      • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
      • FOP - Fyzická osoba podnikající: typOsoby, ico
      • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
      • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
      object

      Examples

    • #1IDM_Mandaty
      Message IDIDM_Mandaty
      object

      Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

      • PO - Právnická osoba: typOsoby, ico
      • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
      • FOP - Fyzická osoba podnikající: typOsoby, ico
      • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
      • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
      object

      Examples

  • RECEIVE IDM_Events_$KodExtSys

    $KodExtSys - Kód externího systému

    Operation IDIDM_Events

    Available only on servers:

    object

    Accepts one of the following messages:

    • #0IDM_Osoby
      Message IDIDM_Osoby
      object

      Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

      • PO - Právnická osoba: typOsoby, ico
      • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
      • FOP - Fyzická osoba podnikající: typOsoby, ico
      • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
      • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
      object

      Examples

    • #1IDM_Uzivatele
      Message IDIDM_Uzivatele
      object
      object

      Examples

    • #2IDM_Mandaty
      Message IDIDM_Mandaty
      object

      Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

      • PO - Právnická osoba: typOsoby, ico
      • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
      • FOP - Fyzická osoba podnikající: typOsoby, ico
      • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
      • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
      object

      Examples

    • #3IDM_CiselnikMandatu
      Message IDIDM_CiselnikMandatu
      object
      object

      Examples

  • RECEIVE IDM_Synchro_$KodExtSys

    $KodExtSys - Kód externího systému

    Operation IDIDM_Synchro

    Available only on servers:

    object

    Accepts one of the following messages:

    • #0IDM_Osoby
      Message IDIDM_Osoby
      object

      Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

      • PO - Právnická osoba: typOsoby, ico
      • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
      • FOP - Fyzická osoba podnikající: typOsoby, ico
      • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
      • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
      object

      Examples

    • #1IDM_Uzivatele
      Message IDIDM_Uzivatele
      object
      object

      Examples

    • #2IDM_Mandaty
      Message IDIDM_Mandaty
      object

      Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

      • PO - Právnická osoba: typOsoby, ico
      • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
      • FOP - Fyzická osoba podnikající: typOsoby, ico
      • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
      • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
      object

      Examples

    • #3IDM_CiselnikMandatu
      Message IDIDM_CiselnikMandatu
      object
      object

      Examples

  • RECEIVE IDM_Events_Superstream

    Operation IDIDM_Events_Superstream

    Available only on servers:

    object

    Accepts one of the following messages:

    • #0IDM_Osoby
      Message IDIDM_Osoby
      object

      Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

      • PO - Právnická osoba: typOsoby, ico
      • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
      • FOP - Fyzická osoba podnikající: typOsoby, ico
      • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
      • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
      object

      Examples

    • #1IDM_Uzivatele
      Message IDIDM_Uzivatele
      object
      object

      Examples

    • #2IDM_Mandaty
      Message IDIDM_Mandaty
      object

      Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

      • PO - Právnická osoba: typOsoby, ico
      • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
      • FOP - Fyzická osoba podnikající: typOsoby, ico
      • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
      • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
      object

      Examples

    • #3IDM_CiselnikMandatu
      Message IDIDM_CiselnikMandatu
      object
      object

      Examples

  • RECEIVE IDM_Synchro_Superstream

    Operation IDIDM_Synchro_Superstream

    Available only on servers:

    object

    Accepts one of the following messages:

    • #0IDM_Osoby
      Message IDIDM_Osoby
      object

      Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

      • PO - Právnická osoba: typOsoby, ico
      • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
      • FOP - Fyzická osoba podnikající: typOsoby, ico
      • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
      • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
      object

      Examples

    • #1IDM_Uzivatele
      Message IDIDM_Uzivatele
      object
      object

      Examples

    • #2IDM_Mandaty
      Message IDIDM_Mandaty
      object

      Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

      • PO - Právnická osoba: typOsoby, ico
      • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
      • FOP - Fyzická osoba podnikající: typOsoby, ico
      • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
      • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
      object

      Examples

    • #3IDM_CiselnikMandatu
      Message IDIDM_CiselnikMandatu
      object
      object

      Examples

Messages

  • #1IDM_Osoby
    Message IDIDM_Osoby
    object

    Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

    • PO - Právnická osoba: typOsoby, ico
    • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
    • FOP - Fyzická osoba podnikající: typOsoby, ico
    • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
    • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
    object
  • #2IDM_Uzivatele
    Message IDIDM_Uzivatele
    object
    object
  • #3IDM_Mandaty
    Message IDIDM_Mandaty
    object

    Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

    • PO - Právnická osoba: typOsoby, ico
    • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
    • FOP - Fyzická osoba podnikající: typOsoby, ico
    • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
    • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
    object
  • #4IDM_CiselnikMandatu
    Message IDIDM_CiselnikMandatu
    object
    object

Schemas

  • object

    Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

    • PO - Právnická osoba: typOsoby, ico
    • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
    • FOP - Fyzická osoba podnikající: typOsoby, ico
    • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
    • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
  • object
  • object

    Primární identifikátor osoby nipezIdOsoby, jinak kombinace údajů dle typu osoby:

    • PO - Právnická osoba: typOsoby, ico
    • POPS - Právnická osoba podřízený subjekt: typOsoby, ico, dalsiRozliseni
    • FOP - Fyzická osoba podnikající: typOsoby, ico
    • OBI - Osoba bez IČO: typOsoby, dalsiRozliseni
    • ZO - Zahraniční osoba: typOsoby, dalsiRozliseni
  • object