ABRA Flexi štandardne overuje používateľov voči internej databáze používateľov. Overovať je však možné aj proti externým systémom, napríklad LDAP. Na tieto účely existuje rozhranie v jazyku Java — takto napísaný kód pobeží ako súčasť servera a overenie zabezpečí za ABRA Flexi.
🚨 Toto rozhranie je experimentálne a v cloude ho použiť nemožno — vyžaduje vlastnú inštaláciu servera, do ktorej classpath sa doplní vaša knižnica. Ak chcete túto funkciu nasadiť, obráťte sa vopred na našu podporu.
Rozhranie cz.winstrom.auth.Auth
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í 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ázi
* 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ěly 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ždy dediť od triedy cz.winstrom.auth.AuthBase alebo cz.winstrom.auth.AuthBaseV2. Umožní nám to rozhranie meniť a pritom zachovať spätnú kompatibilitu, prípadne vám preddefinovať niektoré metódy.
Vlastná implementácia
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;
}
}
Dvojfázové overenie
ABRA Flexi podporuje zabezpečenie pomocou dvojfaktorovej autentizácie. 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 predvolenej implementácii 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();
}
}
Nastavenie servera
Ktorú triedu má server použiť na overovanie, sa určuje voľbou authClass v súbore flexibee-server.xml (kde ho nájsť):
<entry key="authClass">cz.winstrom.auth.AuthSimple</entry>
Doplňujúce súbory je nutné pridať do classpath. Na Linuxe to vykonáte tak, že v súbore /etc/default/flexibee odkomentujete a naplníte premennú CLASSPATH:
CLASSPATH="cesta/ke/knihovne-1.0.jar:cesta/k/auth.jar"
