cs:tech:idp:ldap-backend

Tento návod je již zastaralý a zůstává zde spíše jen pro dokumentačí důvody. Přejděte na aktuální návod.


Konfigurace Shibboleth IdP 2.4 s LDAP autentizaci

relying-party.xml

RelyingParty

V conf/relying-party.xml definujeme zvláštní element RelyingParty (musí být umístěn až za ukončovacím elementem DefaultRelyingParty):

    <rp:RelyingParty id="FEDERATION_ID"
                  provider="ENTITY_ID"
                  defaultSigningCredentialRef="IdPCredential"
                  defaultAuthenticationMethod="urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport">
 
        <rp:ProfileConfiguration xsi:type="saml:ShibbolethSSOProfile" />
        <rp:ProfileConfiguration xsi:type="saml:SAML1AttributeQueryProfile" />
        <rp:ProfileConfiguration xsi:type="saml:SAML1ArtifactResolutionProfile" />
        <rp:ProfileConfiguration xsi:type="saml:SAML2SSOProfile" />
        <rp:ProfileConfiguration xsi:type="saml:SAML2AttributeQueryProfile" />
        <rp:ProfileConfiguration xsi:type="saml:SAML2ArtifactResolutionProfile" />
 
    </rp:RelyingParty>

Význam atributů:

  • provider - provider ID (entityID) - unikátní identifikátor tohoto IdP, pod kterým je veden v metadatech federace
  • defaultSigningCredentialRef - odkaz na příslušný Credential element, kde jsou uvedeny cesty k certifikátům a klíčům (viz dále)
  • defaultAuthenticationMethod - typ autentizace, možné typy jsou definovány v conf/handler.xml (Login handlers)

Dostupné způsoby autentizace jsou popsány v dokumentaci.

MetadataProvider

V elementu MetadataProvider nastavíme způsob získávání metadat. Je několik možnosti, nejvhodnější z nich je stahovat metadata a zálohovat je lokálně po určitou dobu:

  <MetadataProvider id="ShibbolethMetadata" xsi:type="ChainingMetadataProvider"   
      xmlns="urn:mace:shibboleth:2.0:metadata"> 
 
     <MetadataProvider id="METADATAPROVIDER_ID" xsi:type="FileBackedHTTPMetadataProvider" 
                       xmlns="urn:mace:shibboleth:2.0:metadata"  
                       metadataURL="METADATA_URL"
                       backingFile="/opt/shibboleth-idp/metadata/backup/eduid-metadata.xml">
 
  </MetadataProvider>

Význam hodnot:

  • METADATAPROVIDER_ID - unikátní ID pro daný MetadataProvider element
  • METADATA_URL - URL, na kterém jsou publikována centrální metadata federace, viz Souhrn technických detailů

:!: Je potřeba zajistit, aby Tomcat měl právo zápisu do adresaře, kde se budou ukládat zálohovaná metadata (/opt/shibboleth-idp/metadata/backup/).

:!: Od verze 2.4 Shibboleth IdP validuje SSL certifikát serveru, z kterého jsou stahována metadata. Proto je potřeba do Java keystore vložit kořenový certifikát, kterým byl podepsán certifikát na serveru. Umístění Java keystore se může lišit v závislosti na operačním systému nebo implementaci Javy. Například v Debianu u OpenJDK je to soubor /etc/ssl/certs/java/cacerts. Postup vkládání CA certifikátů do Java keystore je popsán zde.

Podrobnější informace najdete v sekci pro metadata.

Certifikáty

Nastavení certifikátu pro komunikaci v rámci federace. Hodnota atributu id musí odpovídat hodnotě příslušného atributu defaultSigningCredentialRef z elementu RelyingParty.

    <security:Credential id="IdPCredential" xsi:type="security:X509Filesystem">
        <security:PrivateKey>/opt/shibboleth-idp/credentials/testshib.key</security:PrivateKey>
        <security:Certificate>/opt/shibboleth-idp/credentials/testshib.crt</security:Certificate>
    </security:Credential>

:!: Je vhodné, aby práva na čtení souboru s klíčem byla omezena pouze na uživatele, které klíč využívají. Obvykle se k tomu definuje systémová skupina v /etc/group a do ní se přidávají systémové uživatele, pod kterými běží Apache a Tomcat.

LDAP autentizace

Kompletní přehled možností nastavení najdete v dokumentaci.

Nastavení LDAP

Pro každou skupinu (relying party) lze definovat typ autentizace (viz výše). Pro LDAP autentizaci je potřeba použít typ UserPassword. Je definován v souboru conf/handler.xml. Definice je implicitně zakomentována, takže je potřeba ji odkomentovat:

    <!--  Username/password login handler -->
    <LoginHandler xsi:type="UsernamePassword" 
                  jaasConfigurationLocation="file:///opt/shibboleth-idp/conf/login.config"
                  authenticationDuration="720">
        <AuthenticationMethod>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</AuthenticationMe
    </LoginHandler>

Řetězec obsažený v elementu AuthenticationMethod se uvadi v atributu defaultAuthenticationMethod elementu RelyingParty (konfigurační soubor relying-party.xml, viz výše).

:!: Věnujte pozornost atributu authenticationDuration, který není nastaven ve výchozím konfiguračním souboru. Udává platnost autentizace tohoto konkrétního login handleru v minutách. Pokud atribut není nastaven, platí výchozí hodnota - 30 minut. V mnoha případech to může být příliš krátká doba, takže nastavte hodnotu atributu podle potřeby. Nepleťte si toto nastavení s nastavením login session v internal.xml. Podrobnosti se dozvíte na wiki stránkách Shibboleth.

LDAP autentizace u Shibboleth IdP se provádí pomocí JAAS. Konfiguraci zapíšeme do souboru conf/login.config:

ShibUserPassAuth {
   edu.vt.middleware.ldap.jaas.LdapLoginModule required
      host="ldap1.example.org ldap2.example.org ldap3.example.org"
      base="ou=people,dc=example,dc=org"
      ssl="true"
      userField="uid";
};

:!: Pro SSL komunikaci s LDAP serverem je potřeba přidat CA certifikát, kterým byl podepsán certifikát na straně serveru, do default java keystore, viz návod.

Například, pokud chceme ověřovat TCS certifikáty, použijeme následující příkaz:

# keytool -import -file /etc/ssl/certs/tcs-ca-bundle.pem -alias tcs-bundle -keystore $JAVA_HOME/jre/lib/security/cacerts

Přihlašovací stránka

:!: Akatualizovaná dokumentace v angličtině

Tato sekce neni nezbytná pro funkci IdP. Pro testování stačí implicitní přihlašovací stránka, proto můžete tu část přeskočit a vrátit se k ní později.

Pro zadání přihlašovacích údajů Shibboleth IdP disponuje standardní přihlašovací stránkou s formulářem. Vzhled přihlašovací stránky lze upravit dvojím způsobem - přímou editací anebo nastavením alternativní stránky.

Pro přímou editaci změňte obsah souboru ./src/main/webapp/login.jsp (a případně i další jako např. error.jsp apod.) v adresáři, kde máte rozbalenou distribuci Shibboleth IdP 2 (/opt/tmp/shibboleth-identityprovider-2.x.x).

Jiná možnost je v nastavení uvést alternativní soubory. Například, když umístíte svůj login.jsp do ./src/main/webapp/myfed/login.jsp, v konfiguraci ./src/main/webapp/WEB-INF/web.xml nastavte u příslušného handleru parametr loginPage:

    <servlet>
        <servlet-name>UsernamePasswordAuthHandler</servlet-name>
        <servlet-class>edu.internet2.middleware.shibboleth.idp.authn.provider.UsernamePasswordLoginServlet</servlet-class>
        <init-param>
            <param-name>loginPage</param-name>
            <param-value>myfed/login.jsp</param-value>
        </init-param>
    </servlet>

Podobným způsobem můžete změnit i cesty k chybovým stránkám error.jsp a error-404.jsp (viz stejný konfigurační soubor). U nich je ale potřeba uvést absolutní cestu, jinak aplikace zahlásí chybu.

Pravděpodobně bude potřeba nastavit jiné kodování stránky než standardní ISO-8859-1. Stačí když na začátku dané stránky připíšeme (viz Tomcat Wiki):

<%@ page 
 contentType="text/html; charset=UTF-8"
%> 

Pro uvedení změn do provozu je potřeba znovu spustit instalační skript install.sh (na otázku odpověďte no, abyste si nepřepsali konfiguraci) a poté restartovat tomcat:

# sh ./install.sh
Buildfile: src/installer/resources/build.xml

install:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Be sure you have read the installation/upgrade instructions on the Shibboleth website before proceeding.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Where should the Shibboleth Identity Provider software be installed? [/opt/shibboleth-idp]

The directory '/opt/shibboleth-idp' already exists.  Would you like to overwrite this Shibboleth configuration? (yes, [no])
no
Copying 46 files to /opt/shibboleth-idp/lib
Copying 5 files to /opt/shibboleth-idp/lib/endorsed
Copying 1 file to /opt/tmp/shibboleth-identityprovider-2.1.2/src/installer
Building war: /opt/tmp/shibboleth-identityprovider-2.1.2/src/installer/idp.war
Copying 1 file to /opt/shibboleth-idp/war
Deleting: /opt/tmp/shibboleth-identityprovider-2.1.2/src/installer/web.xml
Deleting: /opt/tmp/shibboleth-identityprovider-2.1.2/src/installer/idp.war

BUILD SUCCESSFUL
Total time: 9 seconds

Pro jistotu restartujeme Tomcat:

# /etc/init.d/tomcat6 restart
Stopping Tomcat servlet engine: tomcat6 ..
Starting Tomcat servlet engine: tomcat6

Nastavení trvání přihlašovací session

Při prvním přihlášení uživatele se na straně IdP vytváří přihlašovací session. Po dobu trvání přihlašovací session nemusí uživatel zadávat opětovně svoje přihlašovací údaje. Implicitně je doba trvání nastavena na 30 minut, což může být ve většině případů málo. Nastavení délky trvání je uloženo v souboru conf/internal.xml v beanu shibboleth.SessionManager jako druhý argument konstruktoru. Hodnota je uvedena v milisekundách. Příklad nastavení délky na 12 hodin:

    <bean id="shibboleth.SessionManager"
          class="edu.internet2.middleware.shibboleth.idp.session.impl.SessionManagerImpl"
          depends-on="shibboleth.LogbackLogging">
        <constructor-arg ref="shibboleth.StorageService" />
        <constructor-arg value="43200000" type="long" />
    </bean>

Atributy

Nastavení atributů je popsáno ve zvláštní sekci.

Metadata

Na základě uvedených udajů během instalace jsou pro daný IdP vygenerovaná metadata, která jsou uložena v souboru metadata/idp-metadata.xml. Před použitím je potřeba pozměnit a případně doplnit v nich některé údaje, především entityID, scope a případně i certifikáty tak, aby odpovídaly aktuální konfiguraci.

Více informací najdete v sekci pro metadata.

Last modified:: 2017/02/10 07:02