„Shib2IdpTomcat6” változatai közötti eltérés

Innen: KIFÜ Wiki
(LDAP Autentikáció (FORM) beállítása)
 
(14 közbenső módosítás, amit 2 másik szerkesztő végzett, nincs mutatva)
1. sor: 1. sor:
 +
{{TRASH|Ezt a lapot össze kellene vonni [[Shib2IdpInstall|ezzel]], és az elavult infókat frissíteni}}
 +
 +
 +
 
== JVM beállítások ==
 
== JVM beállítások ==
 
A Tomcat6 jelenleg nem működik együtt tökéletesen 6-os JVM-mel (egész pontosan a commons-dbcp csomag a JDBC API pici megváltozása miatt), ezért egyelőre ajánlott 5-ös JVM-mel futtatni - FIXME.
 
A Tomcat6 jelenleg nem működik együtt tökéletesen 6-os JVM-mel (egész pontosan a commons-dbcp csomag a JDBC API pici megváltozása miatt), ezért egyelőre ajánlott 5-ös JVM-mel futtatni - FIXME.
  
A Shibboleth2 IdP nem hajlandó elindulni a JVM-mel szállított Sun-féle Xerces implementációval, ezért az IdP csomaggal szállított Xerces és Xalan implementációkat be kell másolni a $JAVA_HOME/lib/endorsed könyvtárba, vagy a
+
A Shibboleth2 IdP nem hajlandó elindulni a JVM-mel szállított Sun-féle Xerces implementációval, ezért az IdP csomaggal szállított Xerces és Xalan implementációkat be kell másolni a $JAVA_HOME/lib/endorsed könyvtárba, vagy a következő kapcsolóval kell indítani a Tomcat-et:
  
 
  java -Djava.endorsed.dirs=/path/to/xerces-libs
 
  java -Djava.endorsed.dirs=/path/to/xerces-libs
 
kapcsolóval kell indítani a tomcatet.
 
 
  
 
== Shibboleth IdP telepítése ==
 
== Shibboleth IdP telepítése ==
21. sor: 22. sor:
 
  cp ${SHIB_HOME}/war/idp.war /var/lib/tomcat-6/webapps/ROOT
 
  cp ${SHIB_HOME}/war/idp.war /var/lib/tomcat-6/webapps/ROOT
  
== LDAP Autentikáció (FORM) beállítása ==
+
== Új SAML SP felvétele ==
Szerkesszük a ${SHIB_HOME}/conf/login.config -ot:
+
Egy új SP felvételéhez csak az SP metaadatára van szükségünk SAMLv2 szabványos XML formában.
 +
A metaadatot vagy fizikailag el kell helyezni a ${SHIB_HOME}/metadata könyvtárban, vagy egy URL-en elérhetővé kell tenni a Shibboleth IdP számára.
 +
 
 +
Metaadat-források megadása a ${SHIB_HOME}/conf/relying-party.xml -ben
 +
 
 +
<!-- több provider megadása láncolással -->
 +
<MetadataProvider id="ShibbolethMetadata" xsi:type="ChainingMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata">
 +
    <!-- Fájlrendszerből olvasott metaadat -->
 +
    <!-- Fill in metadataFile attribute with deployment specific information -->
 +
    <MetadataProvider id="sp1" xsi:type="FilesystemMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata"
 +
      metadataFile="${SHIB_HOME}/metadata/sp1-meta.xml" maintainExpiredMetadata="true">
 +
    <!--Metaadat aláírás ellenőrzése -->
 +
    <!--MetadataFilter xsi:type="SignatureValidation" trustEngineRef="shibboleth.MetadataTrustEngine" /-->
 +
    </MetadataProvider>
 +
</MetadataProvider>
  
ShibUserPassAuth {
 
  edu.vt.middleware.ldap.jaas.LdapLoginModule required
 
      host="ldap.example.com"
 
      base="ou=people,dc=example,dc=com"
 
      ssl="false"
 
      serviceUser="userid=example-system,ou=systems,dc=example,dc=com"
 
      serviceCredential="password"
 
      userField="uid";
 
}
 
  
A serviceUser és a serviceCredential kihagyható, ekkor anonymous bind történik (azonban ilyen esetben a helytelen név / jelszó megadása LDAP Exception-t okoz és nem a jól értelmezhető hibás név / jelszó üzenetet adja a felhasználónak)
+
== SAMLv2 Profilok beállítása ==
 +
A ${SHIB_HOME}/conf/relying-party.xml -ben kell a következő módosításokat eszközölni:
  
Ezután be kell állítani, hogy ezt a bekonfigurált autentikációt használja a Shibboleth (${SHIB_HOME}/conf/handlers.xml)
+
Először a SAMLv2 SSO Profil alapbeállításai
  
  <LoginHandler xsi:type="UsernamePassword"
+
  <!-- a saját IDP entityID-je, amivel minden SP-hez egyszerre beállíthatjuk mint provider -->
                  authenticationDuration="240"
+
<DefaultRelyingParty
                  jaasConfigurationLocation="file://${SHIB_HOME}/conf/login.config">
+
  provider="https://idp.example.com/idp/shibboleth"
  <AuthenticationMethod>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</AuthenticationMethod>
+
  defaultSigningCredentialRef="IdPCredential">
</LoginHandler>
 
  
Az authenticationDuration paraméter elhagyása esetén az IdP 30 perc érvényességgel állítja ki a munkamenetet (<AuthnStatement SessionNotOnOrAfter="...">), tehát akár aktív tevékenység esetén is 30 perc múlva lejár a felhasználó session-je. Ezt érdemes tehát átállítani magasabb értékre.
+
  <!--
 +
    5 perces assertion érvényesség (óraszinkronizálás IdP - SP között fontos!)
 +
    A válaszok kötelező digitális aláírása
 +
    Attribútum push
 +
  -->
 +
  <ProfileConfiguration xsi:type="saml:SAML2SSOProfile"  
 +
    includeAttributeStatement="true"
 +
    assertionLifetime="300000"
 +
    assertionProxyCount="0"
 +
    signResponses="always"
 +
    signAssertions="never"
 +
    encryptAssertions="conditional"
 +
    encryptNameIds="conditional" />
 +
</DefaultRelyingParty>
  
== Új SP felvétele ==
+
SP esetén az alapértelmezett beállítások felülírása:
 +
<RelyingParty
 +
    id="https://sp1.example.com/shibboleth"
 +
    provider="https://idp.example.com/idp/shibboleth"
 +
    defaultSigningCredentialRef="IdPCredential">
 +
    <ProfileConfiguration xsi:type="saml:SAML2SSOProfile" encryptAssertions="never"/>
 +
</RelyingParty>
  
 
== Attribútum kiadása (címtárból) ==
 
== Attribútum kiadása (címtárból) ==
 +
Egy attribútum kiadásához két dolgot kell beállítani: a resolver-t és a filter-t. Előbbi felelős az attribútum megszerzéséért és a session kontextusba helyezésért, utóbbi az SP felé történő kiadást szabályozza.
 +
 +
Új attribútum beolvasása címtárból (${SHIB_HOME}/conf/attribute-resolver.xml) és SAMLv1 illetve SAMLv2 AttributeStatement -be kódolása:
 +
 +
<resolver:AttributeDefinition id="email" xsi:type="Simple"
 +
  xmlns="urn:mace:shibboleth:2.0:resolver:ad"
 +
  sourceAttributeID="mail">
 +
  <resolver:Dependency ref="myLDAP" />
 +
  <resolver:AttributeEncoder xsi:type="SAML1String"
 +
    xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
 +
    name="urn:mace:dir:attribute-def:mail" />
 +
  <resolver:AttributeEncoder xsi:type="SAML2String"
 +
    xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
 +
    name="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="mail" />
 +
</resolver:AttributeDefinition>
 +
 +
A resolver:Dependency adja meg azt a forrást, amiből az attribútum feloldásra kerül. Ez esetünkben a myLDAP:
 +
 +
<resolver:DataConnector id="myLDAP" xsi:type="LDAPDirectory"
 +
    xmlns="urn:mace:shibboleth:2.0:resolver:dc"
 +
    ldapURL="ldap://ldap.example.com" baseDN="ou=people,dc=example,dc=com"
 +
    principal="userid=shibboleth,ou=systems,dc=example,dc=com"
 +
    principalCredential="password">
 +
      <FilterTemplate>
 +
            <![CDATA[
 +
                (uid=$requestContext.principalName)
 +
            ]]>
 +
      </FilterTemplate>
 +
</resolver:DataConnector>
 +
 +
== NameIdentifier leképzés ==
 +
Szintén az attribute-resolver.xml -ben kell beállítani az Assertion Subject NameID -t, ami az IdP-SP közötti azonosítóért felel. Példaképp egy SAMLv2 Tranziens azonosítót a következőképp állíthatunk be:
  
== Session idő beállítása ==
+
<resolver:AttributeDefinition id="transientId" xsi:type="TransientId" xmlns="urn:mace:shibboleth:2.0:resolver:ad">
 +
  <resolver:AttributeEncoder xsi:type="SAML2StringNameID"
 +
    xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
 +
    nameFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" />
 +
</resolver:AttributeDefinition>
 +
<resolver:PrincipalConnector xsi:type="Transient"
 +
  xmlns="urn:mace:shibboleth:2.0:resolver:pc"
 +
  id="saml2Transient"
 +
  nameIDFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" />

A lap jelenlegi, 2009. szeptember 25., 10:45-kori változata



JVM beállítások

A Tomcat6 jelenleg nem működik együtt tökéletesen 6-os JVM-mel (egész pontosan a commons-dbcp csomag a JDBC API pici megváltozása miatt), ezért egyelőre ajánlott 5-ös JVM-mel futtatni - FIXME.

A Shibboleth2 IdP nem hajlandó elindulni a JVM-mel szállított Sun-féle Xerces implementációval, ezért az IdP csomaggal szállított Xerces és Xalan implementációkat be kell másolni a $JAVA_HOME/lib/endorsed könyvtárba, vagy a következő kapcsolóval kell indítani a Tomcat-et:

java -Djava.endorsed.dirs=/path/to/xerces-libs

Shibboleth IdP telepítése

A kitömörített bináris disztribúció könyvtárában adjuk ki a

sh ant.sh

parancsot, ami megkérdezi a telepítési könyvtárat (${SHIB_HOME}) és a hostnevet, majd elkészíti azt, legenerálja a teszt-céllal használható kulcsokat és tanúsítványokat (ezeket a credentials könyvtárba teszi idp.key, idp.crt néven).

Ezután a tomcat-et futtató felhasználónak (nálam: tomcat) írási jogot kell adni a log könyvtárra, majd telepíthetjük az idp webalkalmazást a tomcat webapps root alá (nálam: a /var/lib/tomcat-6/webapps/ROOT)

chown tomcat:tomcat ${SHIB_HOME}/logs
cp ${SHIB_HOME}/war/idp.war /var/lib/tomcat-6/webapps/ROOT

Új SAML SP felvétele

Egy új SP felvételéhez csak az SP metaadatára van szükségünk SAMLv2 szabványos XML formában. A metaadatot vagy fizikailag el kell helyezni a ${SHIB_HOME}/metadata könyvtárban, vagy egy URL-en elérhetővé kell tenni a Shibboleth IdP számára.

Metaadat-források megadása a ${SHIB_HOME}/conf/relying-party.xml -ben

<MetadataProvider id="ShibbolethMetadata" xsi:type="ChainingMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata">
   <MetadataProvider id="sp1" xsi:type="FilesystemMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata"
      metadataFile="${SHIB_HOME}/metadata/sp1-meta.xml" maintainExpiredMetadata="true">
   </MetadataProvider>
</MetadataProvider>


SAMLv2 Profilok beállítása

A ${SHIB_HOME}/conf/relying-party.xml -ben kell a következő módosításokat eszközölni:

Először a SAMLv2 SSO Profil alapbeállításai

<DefaultRelyingParty 
  provider="https://idp.example.com/idp/shibboleth"
  defaultSigningCredentialRef="IdPCredential">
 <ProfileConfiguration xsi:type="saml:SAML2SSOProfile" 
    includeAttributeStatement="true"
    assertionLifetime="300000"
    assertionProxyCount="0" 
    signResponses="always"
    signAssertions="never" 
    encryptAssertions="conditional"
    encryptNameIds="conditional" />
</DefaultRelyingParty>

SP esetén az alapértelmezett beállítások felülírása:

<RelyingParty 
    id="https://sp1.example.com/shibboleth"
    provider="https://idp.example.com/idp/shibboleth"
    defaultSigningCredentialRef="IdPCredential">
   <ProfileConfiguration xsi:type="saml:SAML2SSOProfile" encryptAssertions="never"/>
</RelyingParty>

Attribútum kiadása (címtárból)

Egy attribútum kiadásához két dolgot kell beállítani: a resolver-t és a filter-t. Előbbi felelős az attribútum megszerzéséért és a session kontextusba helyezésért, utóbbi az SP felé történő kiadást szabályozza.

Új attribútum beolvasása címtárból (${SHIB_HOME}/conf/attribute-resolver.xml) és SAMLv1 illetve SAMLv2 AttributeStatement -be kódolása:

<resolver:AttributeDefinition id="email" xsi:type="Simple" 
  xmlns="urn:mace:shibboleth:2.0:resolver:ad"
  sourceAttributeID="mail">
  <resolver:Dependency ref="myLDAP" />
  <resolver:AttributeEncoder xsi:type="SAML1String" 
    xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
    name="urn:mace:dir:attribute-def:mail" />
  <resolver:AttributeEncoder xsi:type="SAML2String" 
    xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
    name="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="mail" />
</resolver:AttributeDefinition>

A resolver:Dependency adja meg azt a forrást, amiből az attribútum feloldásra kerül. Ez esetünkben a myLDAP:

<resolver:DataConnector id="myLDAP" xsi:type="LDAPDirectory" 
   xmlns="urn:mace:shibboleth:2.0:resolver:dc"
   ldapURL="ldap://ldap.example.com" baseDN="ou=people,dc=example,dc=com"
   principal="userid=shibboleth,ou=systems,dc=example,dc=com"
   principalCredential="password">
     <FilterTemplate>
           <![CDATA[
               (uid=$requestContext.principalName)
           ]]>
     </FilterTemplate>
</resolver:DataConnector>

NameIdentifier leképzés

Szintén az attribute-resolver.xml -ben kell beállítani az Assertion Subject NameID -t, ami az IdP-SP közötti azonosítóért felel. Példaképp egy SAMLv2 Tranziens azonosítót a következőképp állíthatunk be:

<resolver:AttributeDefinition id="transientId" xsi:type="TransientId" xmlns="urn:mace:shibboleth:2.0:resolver:ad">
  <resolver:AttributeEncoder xsi:type="SAML2StringNameID" 
    xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
    nameFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" />
</resolver:AttributeDefinition>
<resolver:PrincipalConnector xsi:type="Transient" 
  xmlns="urn:mace:shibboleth:2.0:resolver:pc" 
  id="saml2Transient"
  nameIDFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" />