Externá autorizácia

Ako vykonať externú autorizáciu prostredníctvom API?

Petr Pech avatar
Written by Petr Pech
Updated over a week ago

Ekonomický systém ABRA Flexi bežne overuje používateľov na základe internej databázy používateľov. Samozrejme, je možné autentizovať sa aj voči externým systémom (napr. LDAP). Na tento účel sme pripravili rozhranie Java, ktoré vám to umožní. Takto napísaný kód sa potom spustí ako súčasť servera a umožní overovanie voči externým systémom.

Upozornenie: toto rozhranie je experimentálne a nemožno ho používať v cloude. Ak chcete túto funkciu používať, kontaktujte nás.

Základom všetkého je rozhranie cz.winstrom.auth.Auth:

package cz.winstrom.auth; import cz.winstrom.vo.UserInfo; import java.sql.Connection; /** * * Základné rozhranie pre autentifikáciu používateľov voči iným službám. Nastavuje sa pomocou nastavení flexibee-server.xml: * * en.winstrom.auth.AuthSimple * * Ako parameter je to názov triedy, ktorá sa má dostať do CLASSPATH servera. * * V súčasnosti aplikácia dokáže vykonať iba overenie pomocou hesla. * * Vzhľadom na zmeny v tomto rozhraní odporúčame, aby implementátori dedili z abstraktnej triedy "AuthBase". * * @autor fers */ public interface Auth { /** * Autorizácia používateľov podľa mena a hesla. * * @param connection pripojenie k databáze centralServer * @param userInfo informácie o používateľovi z centralServer.csuzivatel. Ak je nulový, v hlavnej databáze používateľov ABRA Flexi takýto používateľ neexistuje. Po úspešnej autorizácii sa vytvorí. * @param username meno používateľa * @param password heslo používateľa * @return true ak bolo heslo zadané správne. */ boolean authenticate(Connection connection, UserInfo userInfo, String username, String password); /** * Ak sa autorizácia podarí, ale používateľ neexistuje v databáze centralServer.csuzivatel, vytvorí sa. Autorizačný systém môže ovplyvniť informácie o založenom používateľovi * naplnením triedy userInfo. * * ID sa nesmie meniť (má hodnotu -1) a heslo sa odporúča nevypĺňať, pretože autentifikácia bude vždy prebiehať proti autorizačnému systému. * * Zvyčajne sa vypĺňajú len prístupové práva (vytvorenie firmy, zrušenie firmy, ...) * * @param connection pripojenie k databáze centralServer * @param userInfo informácie o užívateľovi, ktoré sa majú vrátiť (môže sa vrátiť aj iná inštancia, ale musí byť správne vyplnená. * @vrátiť informácie o používateľovi, ktoré sa majú uložiť do databázy. Zvyčajne sa vráti upravený parameter userInfo. */ public UserInfo getUserInfo(Connection connection, UserInfo userInfo); }

Pre priamu implementáciu však vždy použite dedičnosť z triedy cz.winstrom.auth.AuthBase, ktorá nám umožňuje modifikovať toto rozhranie pri zachovaní spätnej kompatibility, alebo predimplementovať niektoré metódy.

Skutočná implementácia triedy autorizácie môže vyzerať takto:

public class AuthSimple extends AuthBase { public boolean authenticate(Connection connection, UserInfo userInfo, String username, String password) { // jednoduchá autentifikácia: username a password sa rovnajú return username.equalsIgnoreCase(password); } @Override public UserInfo getUserInfo(Connection connection, UserInfo userInfo) { userInfo.setCreateCompany(true); // umožní novému používateľovi vytvoriť spoločnosť return userInfo; } } }

A pre úplnosť, len predvolená implementácia overovania zo servera ABRA Flexi:

/** * Základný mechanizmus overovania, ktorý sa zvyčajne používa v systéme ABRA Flexi. Overuje používateľské meno a heslo podľa tabuľky centralServer.csuzivatel. */ public class AuthDefault extends AuthBase { /** * Overuje používateľa na základe hesla v centralServer.csuzivatel. * Ak používateľ neexistuje, userInfo je null. * * @param connection * @param userInfo * @param username * @param password * @return */ public boolean authenticate(Connection connection, UserInfo userInfo, String username, String password) { if (userInfo == null) { return false; } String md5password = DigestUtils.md5Hex(password); if (!md5password.equalsIgnoreCase(userInfo.getPassword()) { return false; } return true; } }

To, aká trieda sa má použiť na overovanie servera, určuje premenná en.winstrom.auth.AuthSimple v súbore flexibee-server.xml.

Do cesty tried je potrebné pridať ďalšie súbory. Napríklad v systéme Linux to môžete urobiť úpravou súboru /etc/default/flexibee a pridaním premennej CLASSPATH:

export CLASSPATH="path/ke/libraries-1.0.jar:path/k/auth.jar"
Did this answer your question?