Přeskočit na hlavní obsah

Autentizace kontaktu

Využití uložených kontaktů k autentizaci

Autor: Petr Pech

ABRA Flexi umožňuje použít kontakty uložené v databázi k autentizaci — typicky když chcete zákazníkům z adresáře dát přihlášení do vlastní aplikace nebo e-shopu, aniž byste jim zakládali uživatelské účty do Flexi. Přes REST API se kontaktu nejdřív nastaví jméno a heslo, potom se dá ověřovat.


Nastavení jména a hesla

Jméno a heslo se kontaktu nastavují běžným importem do evidence kontakt. Heslo lze poslat dvěma způsoby.

Heslo v otevřené podobě

Nejjednodušší varianta — atributy hash a salt zůstanou prázdné:

PUT https://demo.flexibee.eu/c/demo/kontakt.xml

<?xml version="1.0"?>
<winstrom version="1.0">
<kontakt>
<id>1</id>
<username>jan</username>
<password hash="" salt="">heslo</password>
</kontakt>
</winstrom>

Heslo zaslané v otevřené podobě ABRA Flexi uloží v bezpečné formě pomocí hash funkce. Při čtení kontaktu je vlastnost password vždy prázdná — uložený hash se přes API nevrací.

Heslo jako výsledek hash funkce

Heslo je možné poslat už zahashované. V tomto případě jsou atributy hash a salt povinné:

PUT https://demo.flexibee.eu/c/demo/kontakt.xml

<?xml version="1.0"?>
<winstrom version="1.0">
<kontakt>
<id>1</id>
<username>jan</username>
<password hash="sha256" salt="abcd">24b7f0b1ec27ba0dd0d0a4a2e1a3b5a7c9d1e3f5a7b9c1d3e5f7a9b1c3d5e7f9</password>
</kontakt>
</winstrom>

Hodnota elementu password je výsledek hash funkce aplikované na řetězec, který vznikne spojením hodnoty salt, dvojtečky a hesla — tedy salt + ":" + heslo. Výsledek se zapisuje jako hexadecimální řetězec malými písmeny. Původní heslo v tomto případě není nutné zasílat.

💡 Pořadí a dvojtečka jsou podstatné. Pro heslo tajne a salt rovný abcd se hashuje řetězec abcd:tajne — ne tajneabcd ani abcdtajne.

Podporované typy hash funkcí:

Hodnota atributu hash

Poznámka

sha256

Výchozí funkce pro ukládání hesel poslaných v otevřené podobě.

sha512

sha1

md5

pbkdf2

Nejbezpečnější, ale také výrazně nejpomalejší metoda — je záměrně pomalá.

⚠️ Jiná hodnota atributu hash skončí chybou 400 s kódem hashInvalid a hlášením Nepodporovaná hodnota atributu hash.


Autentizace kontaktu

Kontakt se ověří požadavkem POST na akci authenticate. Jméno a heslo se posílají jako data formuláře:

POST https://demo.flexibee.eu/c/demo/kontakt/1/authenticate
Accept: application/xml
Content-Type: application/x-www-form-urlencoded

username=jan&password=heslo

Autentizace funguje také na obecné URL kontaktů, tedy bez uvedení konkrétního záznamu:

POST https://demo.flexibee.eu/c/demo/kontakt/authenticate
Accept: application/xml
Content-Type: application/x-www-form-urlencoded

username=jan&password=heslo

Heslo se do akce authenticate posílá vždy v otevřené podobě — i tehdy, když jste ho nastavovali už zahashované. Hash si ABRA Flexi spočítá sama.


Výsledek

🚨 Výsledkem je vždy odpověď s HTTP stavem 200 — a to i při neúspěšném ověření. Úspěch nikdy neposuzujte podle stavového kódu, ale výhradně podle vlastnosti success v těle odpovědi.

Úspěšná autentizace:

<?xml version="1.0"?>
<winstrom version="1.0">
<success>true</success>
<message/>
</winstrom>

Neúspěšná autentizace:

<?xml version="1.0"?>
<winstrom version="1.0">
<success>false</success>
<message>Bylo zadáno chybné uživatelské jméno či heslo.</message>
</winstrom>


Související

Dostali jste odpověď na svou otázku?