Ekonomický systém ABRA Flexi štandardne overuje používateľov voči internej databáze používateľov. Je samozrejme možné overovať aj voči externým systémom (napr. LDAP). Na tieto účely sme pripravili rozhranie v jazyku Java, ktoré vám to umožní. Takto napísaný kód bude bežať ako súčasť servera a umožní overenie voči externým systémom.
Upozornenie: toto rozhranie je experimentálne a nie je možné ho používať v cloude. Ak budete chcieť túto funkciu použiť, kontaktujte nás.
Základom všetkého je rozhranie cz.winstrom.auth.Auth:
cz.winstrom.auth.Auth</code>:</p>
<pre class="brush: java">package cz.winstrom.auth;
import cz.winstrom.vo.UserInfo;
import java.sql.Connection;
/**
*
* Základní rozhraní pro ověřování uživatelů proti jiným službám. Její nastavení se provede pomocí nastavení flexibee-server.xml:
*
* <entry key="authClass">cz.winstrom.auth.AuthSimple</entry>
*
* Jako parametr je zde název třídy, kterou je nutné dostat do CLASSPATH serveru.
*
* V tuto chvíli umí aplikace pouze ověření plain heslem.
*
* Kvůli změnám v tomto rozhraní doporučujeme, aby implementátoři dědily od abstraktní třídy "AuthBase".
*
* @author fers
*/
public interface Auth {
/**
* Autorizuj uživatele dle jména a hesla.
*
* @param connection napojení do databáze centralServer
* @param userInfo informace o uživateli z centralServer.csuzivatel. Pokud je null, žádný takový uživatel neexistuje v hlavní databázi uživatelů ABRA Flexi. Při úspěšné autorizaci bude vytvořen.
* @param username jméno uživatele
* @param password heslo uživatele
* @return true pokud bylo heslo zadáno správně.
*/
boolean authenticate(Connection connection, UserInfo userInfo, String username, String password);
/**
* Pokud se povede autorizace, ale uživatel neexistuje v databází centralServer.csuzivatel, bude založen. Autorizační systém může ovlivnit informace o založeném uživateli tím,
* že vyplní třídu UserInfo.
*
* ID se nesmí měnit (má hodnotu -1) i heslo doporučujeme nevyplňovat, protože ověření proběhne vždy vúči autorizačnímu systému.
*
* Obvykle se vyplňují pouze přístupová práva (založení firmy, smazání firmy, ...)
*
* @param connection napojení do databáze centralServer
* @param userInfo informace o uživateli, které by měli být vráceny (může být vrácena i jiná instance, ale musí být správně vyplněna.
* @return informace o uživateli, které budou uloženy do databáze. Obvykle se vrací upravený parametr userInfo.
*/
public UserInfo getUserInfo(Connection connection, UserInfo userInfo);
...
}
Pre priamu implementáciu však vždy používajte dedenie od triedy cz.winstrom.auth.AuthBase alebo cz.winstrom.auth.AuthBaseV2, ktoré nám umožnia meniť toto rozhranie a zároveň zachovať spätnú kompatibilitu, prípadne predimplementovať niektoré metódy.
Samotná implementácia autorizačnej triedy môže vyzerať takto:
public class AuthSimple extends AuthBase {
@Override
public boolean authenticate(Connection connection, UserInfo userInfo, String username, String password) {
// jednoduché ověření: jméno a heslo se rovnají
return username.equalsIgnoreCase(password);
}
@Override
public UserInfo getUserInfo(Connection connection, UserInfo userInfo) {
userInfo.setCreateCompany(true); // novému uživateli povolíme založení firmy
return userInfo;
}
}ABRA Flexi podporuje zabezpečenie pomocou dvojfázového overenia. Táto funkcionalita je k dispozícii v novšej triede cz.winstrom.auth.AuthBaseV2 Nasledujúci príklad predpokladá, že overovanie 2FA hesla necháte na predvolenú implementáciu vo Flexi:
public class OTPAuth extends AuthBaseV2 {
@Override
public boolean authenticate(UserAuthenticationFacade facade, String password, String otp) throws WSNotAuthorizedException, WSBlockedException {
String username = facade.getUsername();
return username.equals("admin") && password.equals("admin") && facade.verifyOtp(otp);
}
@Override
public boolean isTwoPhaseAuthEnabled(UserAuthenticationFacade facade, String username) {
final UserInfo userInfo = facade.getUserInfo();
return userInfo.isTwoPhaseAuthEnabled();
}
}Trieda, ktorá sa má použiť na overovanie servera, sa určuje pomocou premennej <entry key="authClass">cz.winstrom.auth.AuthSimple</entry> v súbore flexibee-server.xml.
Doplňujúce súbory je potrebné pridať do classpath. Napríklad v systéme Linux to môžete vykonať tak, že upravíte súbor /etc/default/flexibee, odkomentujete a naplníte premennú CLASSPATH:
CLASSPATH="cesta/ke/knihovne-1.0.jar:cesta/k/auth.jar"
