Autentizace¶
AbraFlexi nabízí dva základní způsoby autentizace přes REST API a jeden pokročilý pro serverová řešení.
HTTP autentizace¶
Nejjednodušší způsob — odešlete standardní hlavičku Authorization: Basic
s každým požadavkem:
curl -u winstrom:winstrom \
'https://demo.flexibee.eu:5434/c/demo/adresar.json?detail=custom:kod&limit=1'
Pokud hlavička chybí, server přesměruje na přihlašovací formulář, případně
vrátí 401 Authorization required. Přihlašovací údaje lze zaslat i přímo
v URL: https://jmeno:heslo@server:5434/c/firma/evidence. Parametr
?auth=http vynutí HTTP autentizaci i tam, kde by se jinak nabízelo SSO;
?auth=html vynutí přihlašovací formulář.
JSON autentizace (autentizační sezení)¶
Vhodné, pokud budete provádět více požadavků a nechcete opakovaně posílat heslo. Získání tokenu:
POST /login-logout/login.json
Tělo požadavku (raw JSON, ne formulářová data):
{
"username": "novak",
"password": "heslo",
"otp": "123456"
}
otp je nepovinné (jednorázové heslo, pokud je vyžadováno dvoufázové
přihlášení). Metoda vrací výsledek pouze ve formátu JSON.
Úspěšná odpověď:
{
"success": true,
"authSessionId": "00112233445566778899aabbccddeeff..."
}
Neúspěšná odpověď:
{
"success": false,
"errors": {"reason": "Bylo zadáno chybné uživatelské jméno či heslo."}
}
Získaný token lze u dalších požadavků předávat třemi způsoby:
Cookie:
authSessionId=00112233...HTTP hlavička:
X-authSessionId: 00112233...URL parametr:
?authSessionId=00112233...(pozor: v tomto případě se přihlašovací údaje logují na serveru)
Aby token zůstal platný, je potřeba jej udržovat pravidelným voláním
GET /login-logout/session-keep-alive.js (doporučeno každých cca 60 s,
stačí i jednou za 30 minut). Pokud máte k dispozici refreshToken, lze
nové authSessionId získat i requestem GET /login-logout/check s tímto
tokenem v cookie.
Odhlášení konkrétního uživatele:
POST /status/user/{username}/logout
Vlastní přihlašovací formulář lze umístit i na cizí stránku pomocí prostého
HTML formuláře odesílajícího na /login-logout/login.html (podporuje
parametr returnUrl a u dvoufázového přihlášení i otp; s SSO — OpenID
nebo SAMLv2 — tuto metodu nelze použít).
Note
Praktická poznámka: u některých HTTP klientů (curl, Postman) je pro
/login-logout/login.json nutné nastavit hlavičku
application/x-www-form-urlencoded nebo multipart/form-data, jinak
tělo požadavku nemusí být správně rozpoznáno.
Serverová autorizace (impersonace)¶
Pro důvěryhodné server-to-server integrace na vlastní instalaci lze vytvořit
/etc/flexibee/server-auth.xml se servisním účtem:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>WinStrom server configuration</comment>
<entry key="username">server-admin</entry>
<entry key="password">heslo</entry>
</properties>
Poté lze hlavičkou X-FlexiBee-Authorization určit, pod kterým uživatelem
má být požadavek zpracován (impersonace). Tato funkce je plánovaná k náhradě
autentizací pomocí SSL klientského certifikátu; import SSL certifikátu přes
API je s touto autorizací možný i bez přihlášení uživatele.
Přístupová práva a role¶
Webové rozhraní (a REST API stejně tak) automaticky uplatňuje přístupová práva definovaná u uživatelské role:
Uživatel nemusí mít k evidenci přístup vůbec, nebo jen pro čtení.
Vidět/měnit může jen některé záznamy (např. jen svého střediska).
Vidět/měnit může jen některé sloupečky (např. bez nákupních cen).
Licence aplikace nemusí danou funkci vůbec povolovat.
Pokud import modifikuje i pole, na která uživatel nemá právo, jsou tyto změny tiše ignorovány; pokud by šlo o modifikaci celého záznamu bez práva, operace je s chybou zamítnuta celá.
Role samotné jsou přístupné přes evidenci role:
GET /c/{firma}/role — seznam rolí
GET /c/{firma}/role/{ID} — role včetně všech přístupových práv
PUT/POST /c/{firma}/role — vytvoření/úprava role
Nová (uživatelská, standard=false) role musí mít kod, nazev a
otecRole (výchozí/rodičovská role, ze které přebírá práva, pokud nejsou
v požadavku explicitně přepsána). Standardní role (standard=true) jsou
neměnné, jejich práva mají identifikátor ve tvaru uuid:{kódRole}-{klíčPráva}.
Ukázka nastavení konkrétního práva existující roli (faktury vydané jen pro čtení, faktury přijaté zcela nepřístupné):
{
"winstrom": {
"role": {
"id": "code:ADMIN_COPY",
"pristPrava": {
"pristupove-pravo": [
{"groupKey": "dDoklFak$$FAV", "typeK": "typPristPrav.pouzeCist"},
{"groupKey": "dDoklFak$$FAP", "typeK": "typPristPrav.nepripustne"}
]
}
}
}
}
Hodnoty typeK: typPristPrav.plny (plný přístup), nepripustne
(nepřístupné), pouzeCist (jen číst), upresneni (upřesnění přes
featureK — Pridavat/Menit/Mazat/Export/Import/OteviratDetail/Sloupce/
Kusovnik/Storno/SlevaZmenaCeny/Sumace/Sluzby/Vazby/HromZmeny/NakupCena/…).
Uživatelé jako evidence¶
Uživatelé jsou přístupní jako evidence uzivatel; při zakládání nového
uživatele je nutné (navíc oproti běžnému exportu) vyplnit shodné
password/passwordAgain:
<uzivatel>
<id>code:einstein</id>
<kod>einstein</kod>
<jmeno>Albert</jmeno>
<prijmeni>Einstein</prijmeni>
<password>heslo</password>
<passwordAgain>heslo</passwordAgain>
<role>code:JENCIST</role>
</uzivatel>
Poslední přihlášení je vidět v poli lastLoginDate (běžní uživatelé) /
lastApiDate (API uživatelé), dostupném přes GET /u.json?detail=full
(prefix /u/ = server-level, mimo konkrétní firmu).