Autentifikace: přístup k API PSB

Nastavení autentifikace API PSB s OAuth2: client credentials, tokeny a multi-tenant přístup krok za krokem.

API PSB od eConnect používá OAuth 2.0 pro autentifikaci. Každý API požadavek obsahuje Bearer token, který získáte z Identity Server eConnect. Tento token je platný jednu hodinu a obsahuje veškeré informace, které PSB potřebuje k určení toho, kdo jste, jménem jaké organizace pracujete a co máte povoleno dělat.

V tomto článku projdete celým procesem autentifikace: od pochopení autentifikačního modelu po žádost o tokeny a jejich používání.

Autentifikační model

PSB pracuje se čtyřmi vrstvami identifikace. Každá vrstva odpovídá na jinou otázku a společně určují přístup k API.

Vrstva 1: Aplikace (clientId + clientSecret) Identifikuje software, který se připojuje k PSB. Softwarový partner zpravidla používá jedinou sadu clientId/clientSecret pro všechny své koncové zákazníky. To zjednodušuje onboarding: koncoví zákazníci musí vyplnit méně technických údajů a pravděpodobnost konfiguračních chyb je menší. Všechna clientId mají stejný scope (ap), a tedy stejná funkční oprávnění.

Vrstva 2: Koncový zákazník (username + password) Identifikuje, jménem jaké organizace se pracuje. Pro každého koncového zákazníka eConnect vytvoří PSB uživatelský účet propojený s jedním nebo více partyId (číslo obchodní komory, DIČ, OIN, belgické číslo podniku). V toku Resource Owner Password Credentials zadáte username a password, které určují, ke kterým party máte přístup. V toku Client Credentials to není nutné, protože oprávnění jsou přímo propojena s aplikací. Uživatelské jméno a heslo se obvykle poskytují přímo koncovému zákazníkovi; koncový zákazník je pak sám sdílí s dodavatelem softwaru. Při vytváření uživatelského účtu koncového zákazníka v rámci vlastního PSB tenantu (například pro integraci 4PS Business Central) nesmí heslo obsahovat speciální znaky, s výjimkou vykřičníku (!).

Vrstva 3: Prostředí (tenantId) Poskytuje administrativní oddělení mezi prostředími. Každý koncový zákazník zpravidla dostane vlastní tenant, což zaručuje úplné oddělení zpráv, konfigurace a logování. Někteří softwaroví partneři umisťují více koncových zákazníků do jednoho tenantu pro centrální správu; jiní volí samostatný tenant pro každého zákazníka pro maximální izolaci. Tenanty nelze sloučit, ale uživatelské účty lze upravit nebo rozšířit.

Vrstva 4: Logování (subscription key, legacy) Header Subscription-Key byl původně určen pro identifikaci v log souborech API. Pro API PSB tento header již není povinný. Pokud jej odešlete, hodnota musí být platná. eConnect někdy stále vydává subscription key, protože umožňují sledování každého požadavku v logách ke konkrétnímu softwarovému partnerovi. Poznámka: pro platformu eConnect (platform.econnect.eu) je subscription key stále povinný.

Žádost o token

Token se žádá odesláním POST požadavku na endpoint /connect/token Identity Serveru.

ProstředíURL Identity ServerAkceptacehttps://accp-identity.econnect.euProdukcehttps://identity.econnect.eu
Tok Client Credentials (machine-to-machine)

Toto je doporučený tok pro integrace server-server. Odešlete pouze svůj clientId a clientSecret.

POST /connect/token HTTP/1.1
Host: identity.econnect.eu
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=vas-client-id
&client_secret=vas-client-secret
&scope=ap
Tok Resource Owner Password Credentials

V tomto toku zadáte také uživatelské jméno a heslo. Je to užitečné, když jsou oprávnění vázána na konkrétního koncového uživatele.

POST /connect/token HTTP/1.1
Host: identity.econnect.eu
Content-Type: application/x-www-form-urlencoded

grant_type=password
&client_id=vas-client-id
&client_secret=vas-client-secret
&username=vase-uzivatelske-jmeno
&password=vase-heslo
&scope=ap
Úspěšná odpověď

Při úspěšném požadavku obdržíte JSON objekt obsahující access token:

{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expires_in": 3600,
  "token_type": "Bearer",
  "scope": "ap"
}

Pole expires_in udává, kolik sekund je token platný. Výchozí hodnota je 3600 sekund (1 hodina).

Používání tokenu

Token Bearer zahrňte do headeru Authorization u každého API požadavku na PSB:

GET /api/v1/me HTTP/1.1
Host: psb.econnect.eu
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

PSB validuje token u každého požadavku. Pokud je token neplatný nebo vypršel, obdržíte odpověď 401 Unauthorized.

Obnovení tokenu

Bearer token je platný 3600 sekund. Po vypršení musíte požádat o nový token přes stejný endpoint /connect/token. Neexistuje samostatný refresh tok: jednoduše zopakujete žádost o token.

V praxi je nejlepší požádat o nový token krátce před vypršením aktuálního, například po 3500 sekundách. Tím se zabrání selhání API volání kvůli vypršenému tokenu, zatímco je požadavek na cestě.

1. Token vyžádán                → platný do t+3600s
2. Po ~3500s: nový token        → starý token ještě ~100s platný
3. Přepnutí na nový token

Token uložte ve Vaší aplikaci a používejte jej pro více požadavků. Nežádejte nový token u každého API volání, protože to zbytečně zatěžuje Identity Server.

Více clientId

Standardně softwarový partner používá jednu sadu clientId/clientSecret pro všechny koncové zákazníky. V některých situacích je vhodné používat více sad:

  • Oddělení testu a produkce. Použijte samostatný clientId pro akceptační prostředí (accp-identity.econnect.eu) a pro produkci (identity.econnect.eu). Tím se zabrání náhodnému použití testovacích údajů v produkci.
  • On-premise instalace. Pokud software běží u koncového zákazníka a zákazník má přístup ke konfiguraci, sdílený clientSecret může představovat bezpečnostní riziko. Se samostatným clientId na zákazníka omezíte škodu v případě úniku přihlašovacích údajů.
  • Oddělená oprávnění na integraci. Pokud budujete více samostatných aplikací, z nichž každá potřebuje jinou API funkcionalitu (například fakturační modul a modul objednávek), můžete pro každou aplikaci použít vlastní clientId pouze s potřebnými oprávněními.

Zrušení clientSecret se týká pouze příslušného clientId. Ostatní zákazníci nebo integrace nejsou dotčeni.

Časté chyby
HTTP kódChybová zprávaMožná příčinaŘešení401UnauthorizedToken vypršel nebo nebyl odeslánVyžádejte nový token z Identity Serveru a zahrňte jej do headeru Authorization401invalid_clientclientId nebo clientSecret je nesprávnýZkontrolujte své přihlašovací údaje. Ujistěte se, že používáte správné prostředí (akceptace vs. produkce)401invalid_grantUživatelské jméno nebo heslo je nesprávné (tok ROPC)Zkontrolujte přihlašovací údaje koncového uživatele403ForbiddenToken je platný, ale uživatel nemá dostatečná oprávnění pro tuto akciZkontrolujte, zda jsou přiřazeny správné role (ApUser/ApManager) a oprávnění party403ForbiddenV tokenu chybí scope apPřidejte scope=ap do Vaší žádosti o token400unsupported_grant_typeNeznámý grant_type v žádosti o tokenPoužijte client_credentials nebo password jako grant_type

Pokud obdržíte 401 při API volání na PSB, nejprve zkontrolujte, zda je token ještě platný. Ve většině případů vypršel a stačí vyžádat nový token.

Tok autentifikace

Následující diagram ukazuje, jak aplikace vyžádá token z Identity Serveru a poté tento token použije pro volání API PSB.


Kompletní API reference včetně všech endpointů a formátů požadavků/odpovědí je k dispozici v interaktivní Swagger dokumentaci.

Zobrazit dokumentaci API PSB