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

Innen: KIFÜ Wiki
(Új SAMLv2 SP felvétele)
 
(10 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:
 
 
 
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)
 
 
 
Ezután be kell állítani, hogy ezt a bekonfigurált autentikációt használja a Shibboleth (${SHIB_HOME}/conf/handlers.xml)
 
 
 
<LoginHandler xsi:type="UsernamePassword"
 
                  authenticationDuration="240"
 
                  jaasConfigurationLocation="file://${SHIB_HOME}/conf/login.config">
 
  <AuthenticationMethod>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</AuthenticationMethod>
 
</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.
 
 
 
A FORM-ot az idp.war -ban tudjuk testreszabni (login.jsp). A szállított login.jsp által beállított FORM tag és INPUT tag-ek tartalmát ne módosítsuk!
 
 
 
== Ú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.
 
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.
 
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.
100. sor: 74. sor:
  
 
== 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:
 +
 +
<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" />