Implementacija AAI@EduHr Single Sign-On mehanizma u PHP aplikacijama

 

Autor: Dubravko Vončina

Datum zadnje izmjene: 04.10.2012.

Sustav jedinstvene autentikacije korisnika:

Sustav jedinstvene autentikacije (engl. Single Sign-On, SSO) je mehanizam koji korisnicima omogućuje da se prilikom pristupanja web aplikacijama autenticiraju jednom i nakon toga se neko vrijeme (dok traje SSO sjednica) više ne moraju ponovo autenticirati za pristup svakoj pojedinačnoj aplikaciji u SSO sustavu.

Najvažnija karakteristika sustava jedinstvene autentikacije je da korisnik svoju korisničku oznaku i zaporku unosi uvijek kroz isto web sučelje, neovisno o aplikaciji kojoj pristupa, a za razliku od ostalih autentikacijskih mehanizama, vlasnik aplikacije kojoj korisnik pristupa niti u jednom trenutku nema pristup korisnikovoj zaporki čime se znatno povećava razina sigurnosti korisničkih podataka.

U sklopu projekta AAI@EduHr ispitan je i implementiran programski alat simpleSAMLphp koji uporabom SAML tehnologije omogućuje jednostavnu implementaciju SSO mehanizma u PHP aplikacijama.

Instalacija programskog alata simpleSAMLphp iz paketa:

Ako se vaša PHP aplikacija nalazi na poslužitelju s CARNetovom distribucijom Debian Linux operacijskog sustava, poželjno je da simpleSAMLphp instalirate iz odgovarajućeg instalacijskog paketa. Instalacija iz paketa ima konfiguraciju unaprijed prilagođenu uporabi u sustavu AAI@EduHr i za normalno funkcioniranje simpleSAMLphp autentikacijskog modula nije potrebno ništa dodatno konfigurirati.

Međutim, da bi autentikacija kroz sustav AAI@EduHr bila omogućena, potrebno je podatke o vašoj aplikaciji dodati i u konfiguraciju središnjeg autentikacijskog servisa. Da bismo mogli dodati vašu aplikaciju u konfiguraciju središnjeg autentikacijskog servisa, na adresu team@aaiedu.hr trebate nam elektroničkom poštom poslati sljedeće podatke:

  • Web adresu (URL) na kojoj će biti dostupna vaša aplikacija koju želite da uključimo u sustav jedinstvene autentikacije korisnika;

  • Popis korisničkih atributa koje središnji autentikacijski servis treba isporučivati vašoj aplikaciji;

  • Metapodatke (EntityID, AssertionConsumerService, SingleLogoutService) o vašoj instalaciji simpleSAMLphp-a. Ove podatke možete saznati na način da web preglednikom odete na početnu stranicu vaše simpleSAMLphp instalacije, prijavite se kao administrator (uporabom zaporke upisane u datoteci config.php), kliknete na opciju Federacija (engl. Federation) i zatim u odjeljku SAML 2.0 metapodaci o davatelju usluge (engl. SAML 2.0 SP Metadata) kliknete na Prikaži metapodatke (engl. Show Metadata). Na stranici koja će vam se otvoriti u odjeljku SAML 2.0 metapodaci o davatelju usluge (engl. SAML 2.0 SP Metadata) bit će navedena adresa (URL) na kojoj su dostupni vaši metapodaci. Tu adresu nam, zajedno s ostalim potrebnim podacima, pošaljite elektroničkom poštom.

Daljnje upute na koji način implementirati simpleSAMLphp autentikacijski modul u vašoj PHP aplikaciji navedene su u koraku 6. na web stranici http://simplesamlphp.org/docs/1.6/simplesamlphp-sp (prvih pet koraka na toj stranici možete preskočiti), a možete dohvatiti i arhivu aaieduhr_sso_1_6.tar.gz u kojoj se, između ostalog, nalaze i skripte login-demo.php i logout-demo.php koje služe kao primjer kako implementirati AAI@EduHr Single Sign-On mehanizam u vašoj aplikaciji. Za demonstraciju bi trebalo biti dovoljno da na poslužitelju na kojem ste instalirali simpleSAMLphp snimite ove dvije PHP skripte u neki direktorij dostupan web poslužitelju i u require_once naredbi na početku svake skripte navedete ispravnu putanju do _autoload.php datoteke te nakon toga u vaš web preglednik unesete adresu na kojoj se skripta login-demo.php nalazi.

Instalacija izvorne verzije programskog alata simpleSAMLphp:

Ako se vaša aplikacija ne nalazi na poslužitelju s CARNetovom distribucijom Debian Linux operacijskog sustava, simpleSAMLphp možete instalirati prema sljedećim uputama. Radi lakšeg održavanja preporučamo da instalirate verziju 1.6.3, ali ove upute trebale bi funkcionirati i za sve novije verzije. Osnovna instalacija svodi se na raspakiravanje komprimirane arhive sa simpleSAMLphp programskim alatom u odgovarajući direktorij i postavljanja odgovarajućeg aliasa u konfiguraciji web poslužitelja.

Nakon instalacije potrebno je iskonfigurirati simpleSAMLphp kao SAML 2.0 Service Provider (SP). U nastavku su upute kako iskonfigurirati simpleSAMLphp 1.6.3 kao SAML 2.0 SP za autentikaciju korisnika putem AAI@EduHr sustava.

U uputama se podrazumjeva da je simpleSAMLphp instaliran u direktoriju /var/simplesamlphp/. Ako ste simpleSAMLphp instalirali u neki drugi direktorij, u daljnim uputama jednostavno zamijenite direktorij /var/simplesamlphp/ direktorijem u kojem ste instalirali simpleSAMLphp.


Za ugradnju Single Sign-On autentikacijskog mehanizma u PHP aplikaciju potrebno je napraviti sljedeće:

  1. Dohvatite i raspakirajte arhivu aaieduhr_sso_1_6.tar.gz u kojoj se nalaze simpleSAMLphp konfiguracijske datoteke prilagođene za komunikaciju sa središnjim AAI@EduHr autentikacijskim servisom te jednostavan primjer PHP aplikacije koja koristi simpleSAMLphp za autentikaciju korisnika putem AAI@EduHr infrastrukture.

  2. U arhivi koju ste dohvatili u prethodnom koraku između ostaloga se nalaze i konfiguracijske datoteke koje je potrebno iskopirati na odgovarajuća mjesta u direktoriju u kojem ste instalirali simpleSAMLphp. Datoteku saml20-idp-remote.php trebate staviti u direktorij /var/simplesamlphp/metadata/ (prebrišite postojeću datoteku saml20-idp-remote.php koja se tamo nalazi), a datoteku authsources.php iskopirajte u direktorij /var/simplesamlphp/config/ (također možete prebrisati orihginalnu datoteku authsources.php koja se već nalazi u tom direktoriju).

  3. Nakon toga, u konfiguracijskoj datoteci authsources.php u polje entityID trebate upisati jedinstveni identifikator vaše aplikacije. To može biti proizvoljna vrijednost, ali najbolje je upisati DNS naziv (FQDN) poslužitelja na kojem ste instalirali simpleSAMLphp ili web adresu (URL) vaše aplikacije koja će koristiti simpleSAMLphp za SSO autentikaciju.

  4. Ako želite da se dnevnički zapisi simpleSAMLphp-a na vašem poslužitelju umjesto u syslog zapisuju u zasebnu datoteku simplesamlphp.log, u datoteci /var/simplesamlphp/config/config.php morate podesiti vrijednost parametra loggingdir:

    'loggingdir' => 'direktorij_u_koji_ce_se_spremati_dnevnicki_zapisi',

    Pritom pazite da vaš web poslužitelj ima ovlasti pisanja u taj direktorij, a u tom slučaju, osim parametra loggingdir morate postaviti i odgovarajuću vrijednost parametra logging.handler:

    'logging.handler' => 'file',

    Od verzije 1.4 simpleSAMLphp koristi način manipulacije podacima uporabom tzv. modula. Redoslijed izvršavanja pojedinih modula definiran je parametrom authproc.sp u datoteci /var/simplesamlphp/config/config.php. Za uredno zapisivanje logova o autentikaciji korisnika preporučamo da parametar authproc.sp postavite na sljedeću vrijednost:

    'authproc.sp' => array(
    55 => array( 'class' => 'core:StatisticsWithAttribute', 'attributename' => 'hrEduPersonUniqueID', 'type' => 'saml20-idp-SSO', ),
    ),


    U arhivi aaieduhr_sso_1_6.tar.gz nalazi se također i primjer config.php datoteke koji možete iskoristiti za provjeru jeste li ispravno iskonfigurirali vašu simpleSAMLphp instalaciju.

  5. U odgovarajućoj konfiguracijskoj datoteci (standardno httpd.conf) za vaš web na Apache poslužitelju postavite alias

    Alias /simplesaml /var/simplesamlphp/www

    i učitajte novu konfiguraciju Apache poslužitelja ili jednostavno restartajte poslužitelj.

  6. Sada bi vaša instalacija simpleSAMLphp-a trebala biti iskonfigurirana za autentikaciju korisnika kroz središnji autentikacijski servis AAI@EduHr sustava. Međutim, da bi autentikacija kroz AAI@EduHr sustav bila omogućena, potrebno je podatke o vašoj aplikaciji dodati i u konfiguraciji središnjeg autentikacijskog servisa.
    Da bismo dodali vašu aplikaciju u konfiguraciju središnjeg autentikacijskog servisa, na adresu team@aaiedu.hr trebate nam elektroničkom poštom poslati sljedeće podatke:

    • Web adresu (URL) na kojoj će biti dostupna vaša aplikacija koju želite da uključimo u sustav jedinstvene autentikacije korisnika;

    • Popis korisničkih atributa koje središnji autentikacijski servis treba isporučivati vašoj aplikaciji;

    • Metapodatke (EntityID, AssertionConsumerService, SingleLogoutService) o vašoj instalaciji simpleSAMLphp-a. Ove podatke možete saznati na način da web preglednikom odete na početnu stranicu vaše simpleSAMLphp instalacije, prijavite se kao administrator (uporabom zaporke koju ste upisali u datoteci config.php), kliknete na opciju Federacija (engl. Federation) i zatim u odjeljku SAML 2.0 metapodaci o davatelju usluge (engl. SAML 2.0 SP Metadata) kliknete na Prikaži metapodatke (engl. Show Metadata).
      Na stranici koja će vam se otvoriti u odjeljku SAML 2.0 metapodaci o davatelju usluge (engl. SAML 2.0 SP Metadata) bit će navedena adresa (URL) na kojoj su dostupni vaši metapodaci. Tu adresu nam, zajedno s ostalim potrebnim podacima, pošaljite elektroničkom poštom.


  7. U arhivi koju ste skinuli i raspakirali u 2. koraku nalaze se i skripte login-demo.php i logout-demo.php koje služe kao primjer kako implementirati Single Sign-On u vašoj aplikaciji. Za demonstraciju bi trebalo biti dovoljno da na poslužitelju na kojem ste iskonfigurirali simpleSAMLphp snimite ove dvije PHP skripte u neki direktorij dostupan web poslužitelju i u require_once naredbi na početku svake skripte navedete ispravnu putanju do _autoload.php datoteke te nakon toga u vaš web preglednik unesete adresu na kojoj se skripta login-demo.php nalazi.

Važna napomena (samo za Debian Lunux):

Da bi autentikacija i razmjena podataka ispravno funkcionirala na poslužiteljima s Debian Linux operacijskim sustavom, nakon instalacije simpleSAMLphp-a potrebno je postaviti vrijednost Suhosin parametra:

suhosin.get.max_value_length = 16382

Ako se instalacija vrši iz paketa simplesamlphp-aai, ova vrijednost će biti automatski postavljena. U suprotnom je odgovarajuću vrijednost navedenog Suhosin parametra potrebno postaviti ručno.

Naravno, iako smo na ovoj stranici nastojali smo dati dovoljno detaljne upute za implementaciju SSO autentikacijskog mehanizma u PHP aplikacije uporabom simpleSAMLphp programskog alata, ako imate bilo kakvih pitanja vezanih uz prethodno opisanu proceduru ili središnji AAI@EduHr autentikacijski servis, uvijek nas možete kontaktirati elektroničkom poštom na team@aaiedu.hr.