Postup zřízení SP 2.0

  1. nainstalovat webserver Apache nebo IIS
  2. vygenerovat klíče a získat certifikát pro SSL na webserveru, nejlépe od Cybertrust Educational CA, která je předinstalovaná v prohlížečích, a nainstalovat ho
  3. vygenerovat klíče a získat certifikát pro Shibboleth na webserveru od CESNET CA
  4. nainstalovat Shibboleth SP 2.0 (viz Instalace SP 2.1 z RPMS balíků)
  5. nakonfigurovat Shibboleth v shibboleth2.xml s ohledem na jméno, web, umístění certifikátů, umístění metadat, viz Konfigurace SP 2.0 (czTestFed)
  6. přes https://muj_server/Shibboleth.sso/Metadata získat moje vlastní metadata a odeslat je Novakovovi. Pokud to nejde, pomůže stáhnout metadata ručně a nastavit jejich čtení z lokálního souboru.
  7. počkat, až se v metadatech federace projeví záznam o mém SP
  8. zvolit která URL budou chráněna v konfiguraci webserveru a zda vždy nebo pomocí lazy sessions
  9. nastavit v attributes-map.xml převod atributů na proměnné prostředí a případně HTTP hlavičky
  10. upravit/napsat aplikaci, aby používala atributy

Použití SP z hlediska vývojáře

  1. v konfiguraci webserveru je nutno zvolit, zda se uživatel autentizuje už při vstupu nebo až na požádání (tzv. lazy sessions)
  2. při lazy sessions uživatel žádá o přihlášení kliknutím na URL https://stroj/Shibboleth.sso/sessionInitiator?target=url_kam_se_ma_vratit kde sessionInitiator odpovídá obsahu atributu Location tagu <SessionInitiator> v souboru shibboleth2.xml, normálně tedy /WAYF.
  3. informace o přihlášeném uživateli jsou poskytovány jako proměnné prostředí (pro CGI programy, PHP skripty, ASP)
  4. při použití Apache lze zapnout i předávání v HTTP hlavičkách
  5. odhlášení provádí uživatel klinutím na URL https://stroj/Shibboleth.sso/Logout?return=url_kam_se_ma_vratit

Apache

V konfiguraci Apache je třeba mít direktivu pro <Location> (chrání libovolná URL, nutné u servletů) nebo <Directory> (chrání soubory ve fyzickém adresáři, vhodné u PHP) specifikující ochranu:

 <Location "/aplikace/*">
   # zapne ochranu Shibbolethem
   AuthType shibboleth
   # Off - lazy sessions, On - vždy autentizuje
   ShibRequireSession On
   # On - atributy v HTTP hlavičkách a proměnných, Off - jen v proměnných
   ShibUseHeaders On
   # může kdokoliv autentizovaný
   require valid-user
 </Location>

případně pro lazy sessions

<Directory "/srv/www/htdocs/phpBB3">
     Options Indexes FollowSymLinks
     AllowOverride Limit
     Order allow,deny
     Allow from all

     AuthType shibboleth
     ShibRequireSession Off
     ShibUseHeaders on
     require shibboleth
</Directory>

U direktivy require je možné používat aliasy z attribute-map.xml, tj. třeba

  #jen lidé opravdu z Masarykovy Univerzity, tj. ne návštěvníci knihovny MU s účtem v ISu
  require affiliation member@muni.cz

a dokonce regulární výrazy, tj.

  # kdokoliv s affiliation member z libovolné domény .cz
  require affiliation ~ ^member@.+\.cz$

Viz https://spaces.internet2.edu/display/SHIB/SPProtectionConfig (podrobnější pro Shib1) a https://spaces.internet2.edu/display/SHIB2/NativeSPProtectContent (příliš stručné, ale pro Shib2)

PHP

V PHP lze atributy získat z proměnných prostředí, a i HTTP hlavičky jsou mapovány na proměnné prostředí. Pokud mám v attribute-map.xml

<Attribute name="urn:mace:dir:attribute-def:mail" id="mail" aliases="Shib-InetOrgPerson-mail"/>

pak získám přihlášeného uživatele a jeho email takto:

function get_user_name() {
  if(empty($_SERVER['REMOTE_USER'])) return NULL;
  return $_SERVER['REMOTE_USER'];
}

/* z HTTP hlavičky */
function get_user_email() {
  return $_SERVER['HTTP_SHIB_INETORGPERSON_MAIL'];
}

/* z proměnné pojmenované aliasem Shib-InetOrgPerson-mail */
function get_user_email2() {
  return $_SERVER['Shib_InetOrgPerson_mail'];
}

/* z proměnné pojmenované obsahem atributu id */
function get_user_email3() {
  return $_SERVER['mail'];
}

Tomcat a Java Servlety

Pro propojení TomCatu a Apache je nejlepší použít mod_jk, v konfiguraci Apache stačí mít

<IfModule mod_jk.c>
 JkWorkerProperty worker.list=tomcat
 JkWorkerProperty worker.tomcat.type=ajp13
 JkWorkerProperty worker.tomcat.host=localhost
 JkWorkerProperty worker.tomcat.port=8009
 
 JkMount /aplikace/* tomcat
</IfModule>

a v TomCatu je v conf/server.xml AJP13 connector na portu 8009 aktivován v defaultní konfiguraci. Hodí se zakázat v TomCatu HTTP connectoru přijímat vnější požadavky, aby uživatelé nemohli Shibboleth obejít, a nastavit AJP13 connectoru tomcatAuthentication=„false“ aby se předávat REMOTE_USER do request.getRemoteUser():

 <Connector port="8080" protocol="HTTP/1.1" address="127.0.0.1" >
               
 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" tomcatAuthentication="false"/>

V servletech pak lze Shibboletí atributy číst z HTTP hlaviček (pokud je to nastaveno), tj.

  String user = request.getRemoteUser();
  String mail = request.getHeader("Shib-InetOrgPerson-mail");

Pozor, kódování češtiny v Shibbolethu je utf-8 (protože si předává XML dokumenty), ale HTTP hlavičky jsou v iso-8859-1, takže je potřeba opravit kódování:

  String jmeno = request.getHeader("cn");
  if(jmeno!=null) jmeno = new String(jmeno.getBytes("iso-8859-1"),"utf-8");

Dále si lze v konfiguraci Apache nastavit mod_jk tak, aby určité proměnné předával jako attributy requestu:

 # v konfiguraci Apache
 JkEnvVar Shib-InetOrgPerson-mail
 JkEnvVar mail
 // v servletu
 String mail = (String) request.getAttribute("Shib-InetOrgPerson-mail");
 String mail2 = (String) request.getAttribute("mail");
 // v JSP EL
 ${mail}

Pozor, jména takto předaných proměnných nelze získat pomocí request.getAttributeNames(), je to chyba v TomCatu.

IIS

V konfiguraci IIS se nedá nic nastavit, je třeba použít <RequestMap>v shibboleth2.xml.

ASP

V ASP lze číst atributy z HTTP hlaviček, tj. např.:

Request.ServerVariables("HTTP_MAIL")
cztestfed/howto/sp2/index.txt · Poslední úprava: 2008-05-23 11:20 (upraveno mimo DokuWiki)
CESNET2 powered
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0