Integrace webových aplikací

Jako firma zabývající se vývojem zakázkového software a outsourcingem, jsme potřebovali vytvořit intranet pro naše zákazníky a partnery. Ten se skládá z různých propojených aplikací. Tyto aplikace musí mít jednotný vzhled, jednotné přístupové konto a omezování podle přístupových práv.

Narazili jsme tedy na problém integrace několika webových aplikací:

Integraci jsme prováděli na těchto úrovních:

  • běh na jedné adrese
  • ověřování uživatelů a centrální databáze
  • jednotný vzhled a jednotné menu dle přístupových práv

Jednotlivé aplikace jsou psány v různých jazycích a používají různé šablonovací systémy.

Běh na jedné adrese

Pro toto má apache velmi silnou podporu – od aliasů, mod_rewrite, proxy pro přesměrování na jiný webserver až po instalaci aplikace do vlastního podadresáře.

Ověřování uživatelů a centrální databáze

Pro ověřování uživatelů jsme použili ověřování ve webovém serveru apache. Pro centrální databázi uživatelů používáme replikovaný OpenLDAP. Konfigurace apache tedy vypadá takto:

    <Location />
        AuthLdapEnabled on
        AuthLDAPURL "ldaps://server1:636 server2:636/dc=firma,dc=cz?uid,mail,cn?"

        AuthLDAPGroupAttribute memberUid
        AuthLDAPGroupAttributeIsDN off
        AuthLDAPRemoteUserIsDN off

        AuthType Basic
        AuthName "Intranet"
        require group cn=wiki,ou=groups,dc=firma,dc=cz
        Satisfy all
    </Location>

Důležité je ?uid,mail,cn?. To zajišťuje, že tyto atributy budou exportované pro jednotlivé moduly ve webovém serveru (CGI moduly, PHP, …) jako AUTHENTICATE_UID, AUTHENTICATE_MAIL a AUTHENTICATE_CN, tedy uživatelské jméno (uid), email (mail), a celé jméno uživatele (cn). Je pak možné nastavit v bugzille od verze 2.20, aby tyto informace přebírala a zobrazovala. Tímto způsobem je možné nastavit (bugzilla, všechny SVN klienti, TWiki) nebo upravit (MediaWiki, …) i všechny další programy, které chceme integrovat.

Přístupová práva jsou určována členstvím ve skupině pro danou aplikaci – např. require group cn=bugzilla,ou=groups,dc=firma,dc=cz.

Pro správu LDAP databáze používáme program GOSA.

Jednotný vzhled a jednotné menu dle přístupových práv

Každá stránka by měla mít jednotný vzhled. Lze upravit všechny aplikace a zde přímo přidat společnou hlavičku/patičku – není možné použít vložení nějakého souboru, protože každá aplikace je psána jinou technologií. Pokud tedy chcete častěji společné části upravovat nebo je mít vytvářené dynamicky dle práv uživatele, narazíte na problémy. My jsme vše vyřešili filtrem SSI. Do šablon jednotlivých aplikací jsme přidali <–#include virtual="/pub/virtual/header/" –>. Pak jsme nastavili apache, aby toto nahradil obsahem dané stránky. Podpora filtrů je podporována až od apache verze 2.0.

Pokud ovšem chcete vkládané části vytvářet pomocí PHP, narazíte na problém. Pokud je PHP stránka vkládána pomocí SSI, interpretr PHP havaruje. Řešením je nevolat PHP jako apache modul, ale jako CGI skript. Abychom zabránili SSI úpravě binárním souborům nebo obsahu SVN repository (a tím způsobili poškození souboru) je nastaveno, že se má SSI aplikovat jen pro konkrétní typy souborů (text/html, text/xhtml, …) a rozhodně se nemají aplikovat na SVN repository (proto specifikujeme seznam aplikací).

    Alias /pub/virtual/header/ /www/pub/virtual/header/index.html
    Alias /pub/virtual/footer/ /www/pub/virtual/footer/index.html
    ScriptAlias /pub/virtual/menu/ /www/pub/virtual/menu/index.cgi

   <Location ~ "^(/websvn/|/bugz/|/pub/|/webcam/|/mrtg/|/wiki/|/browse/)">
         AddOutputFilterByType INCLUDES text/html text/xhtml multipart/x-mixed-replace application/xml 
         Options +Includes
         AcceptPathInfo On
    </Location>

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *