Módosítások

Shib2SP

17 238 bájt hozzáadva, 2023. augusztus 15., 16:16
új működő példa config
Az SP-t a '''<code>shibbolethshibboleth2.xml</code>''' állományon keresztül konfigurálhatjuk. Ebben a leírásban feltételezzük, hogy az SP konfigurációja a '''<code>/etc/shibboleth</code>''' könyvtárban van.
=Előkészületek =* [[Shibboleth2_SP|Telepítsük a shibbolethet]]* Válasszunk egy egyedi azonosítót, ún. <code>entityID</code>-t az SP számára. Ez az azonosító URL formájú, létező hosztnév, egy - alapértelmezés szerint - /shibboleth path-szal. Pl: <code>https://lipton.aai.niif.hu/shibboleth</code>. Megfelelő konfiguráció után az entityID-t meghívva válaszul az adott entitás metaadatát kapjuk válaszul. = Működő példa konfiguráció 1 = <source lang="xml"><SPConfig xmlns="urn:mace:shibboleth:2.0:native:sp:config" xmlns:conf="urn:mace:shibboleth:2.0:native:sp:config" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" clockSkew="180">  <!-- By default, in-memory StorageService, ReplayCache, ArtifactMap, and SessionCache are used. See example-shibboleth2.xml for samples of explicitly configuring them. -->  <!-- To customize behavior for specific resources on Apache, and to link vhosts or resources to ApplicationOverride settings below, use web server options/commands. See https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPConfigurationElements for help.  For examples with the RequestMap XML syntax instead, see the example-shibboleth2.xml file, and the https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPRequestMapHowTo topic. -->  <!-- The ApplicationDefaults element is where most of Shibboleth's SAML bits are defined. --> <ApplicationDefaults entityID="https://events.prace-ri.eu/shibboleth" REMOTE_USER="eppn" cipherSuites="ECDHE+AESGCM:ECDHE:!aNULL:!eNULL:!LOW:!EXPORT:!RC4:!SHA:!SSLv2">  <!-- Controls session lifetimes, address checks, cookie handling, and the protocol handlers. You MUST supply an effectively unique handlerURL value for each of your applications. The value defaults to /Shibboleth.sso, and should be a relative path, with the SP computing a relative value based on the virtual host. Using handlerSSL="true", the default, will force the protocol to be https. You should also set cookieProps to "https" for SSL-only sites. Note that while we default checkAddress to "false", this has a negative impact on the security of your site. Stealing sessions via cookie theft is much easier with this disabled. --> <Sessions lifetime="28800" timeout="3600" relayState="ss:mem" checkAddress="false" handlerSSL="false" cookieProps="http">  <!-- Configures SSO for a default IdP. To allow for >1 IdP, remove entityID property and adjust discoveryURL to point to discovery service. (Set discoveryProtocol to "WAYF" for legacy Shibboleth WAYF support.) You can also override entityID on /Login query string, or in RequestMap/htaccess. -->  <SSO discoveryProtocol="SAMLDS" discoveryURL="https://mdx.eduid.hu/role/idp.ds"> SAML2 SAML1 </SSO>   <!-- SAML and local-only logout. --> <Logout>SAML2 Local</Logout>  <!-- Extension service that generates "approximate" metadata based on SP configuration. --> <Handler type="MetadataGenerator" Location="/Metadata" signing="false"/>  <!-- Status reporting service. --> <Handler type="Status" Location="/Status" acl="127.0.0.1 ::1"/>  <!-- Session diagnostic service. --> <Handler type="Session" Location="/Session" showAttributeValues="false"/>  <!-- JSON feed of discovery information. --> <Handler type="DiscoveryFeed" Location="/DiscoFeed"/>  </Sessions>  <!-- Allows overriding of error template information/filenames. You can also add attributes with values that can be plugged into the templates. --> <Errors supportContact="prace-indico-admin@niif.hu" helpLocation="/about.html" styleSheet="/shibboleth-sp/main.css"/>  <MetadataProvider type="Dynamic" ignoreTransport="true"> <Subst>https://mdx.eduid.hu/entities/$entityID</Subst> <MetadataFilter type="Signature" certificate="href-metadata-signer-2020.crt"/> </MetadataProvider>  <!-- Example of remotely supplied batch of signed metadata. --> <!-- <MetadataProvider type="XML" validate="true" uri="http://example.org/federation-metadata.xml" backingFilePath="federation-metadata.xml" reloadInterval="7200"> <MetadataFilter type="RequireValidUntil" maxValidityInterval="2419200"/> <MetadataFilter type="Signature" certificate="fedsigner.pem"/> <DiscoveryFilter type="Blacklist" matcher="EntityAttributes" trimTags="true" attributeName="http://macedir.org/entity-category" attributeNameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" attributeValue="http://refeds.org/category/hide-from-discovery" /> </MetadataProvider> -->  <!-- Example of locally maintained metadata. --> <!-- <MetadataProvider type="XML" validate="true" file="partner-metadata.xml"/> -->  <!-- Map to extract attributes from SAML assertions. --> <AttributeExtractor type="XML" validate="true" reloadChanges="false" path="attribute-map.xml"/>  <!-- Use a SAML query if no attributes are supplied during SSO. --> <AttributeResolver type="Query" subjectMatch="true"/>  <!-- Default filtering policy for recognized attributes, lets other data pass. --> <AttributeFilter type="XML" validate="true" path="attribute-policy.xml"/>  <!-- Simple file-based resolver for using a single keypair. --> <CredentialResolver type="File" key="events-shib.key" certificate="events-shib.cert"/>  <!-- The default settings can be overridden by creating ApplicationOverride elements (see the https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPApplicationOverride topic). Resource requests are mapped by web server commands, or the RequestMapper, to an applicationId setting.  Example of a second application (for a second vhost) that has a different entityID. Resources on the vhost would map to an applicationId of "admin": --> <!-- <ApplicationOverride id="admin" entityID="https://admin.example.org/shibboleth"/> --> </ApplicationDefaults>  <!-- Policies that determine how to process and authenticate runtime messages. --> <SecurityPolicyProvider type="XML" validate="true" path="security-policy.xml"/>  <!-- Low-level configuration about protocols and bindings available for use. --> <ProtocolProvider type="XML" validate="true" reloadChanges="false" path="protocols.xml"/> </SPConfig> </source> = Működő példa konfiguráció 2 =
<source lang="xml">
<!-- Chains together all your metadata sources. -->
<MetadataProvider type="Chaining">
<MetadataProvider type="XML" uri="httphttps://idpmetadata.niifeduid.hu/current/href-idp-metadata.xml" backingFilePath="href-idp-metadata.xml" reloadInterval="7200"> <SignatureMetadataFilter certificate="href_signerhref-metadata-signer-2010.crt"/> </MetadataProvider> <!-- Just for eduGAIN-ized services --> <MetadataProvider type="XML" uri="httphttps://idpmetadata.niifeduid.hu/href-test-idp-metadatacurrent/niifi.xml" backingFilePath="href-test-idp-metadataniifi.xml" reloadInterval="7200"> <SignatureMetadataFilter certificate="href_signer.crt"/> </MetadataProvider> <MetadataProvider type="XML" uri="http://idp.niif.hu/href-vho-metadata.xml" backingFilePath="href-vhosigner-metadata.xml" reloadInterval="7200"> <SignatureMetadataFilter certificate="href_signer2010.crt"/> </MetadataProvider>
</MetadataProvider>
<!-- Example of a second application (using a second vhost) that has a different entityID. -->
<!-- <ApplicationOverride id="admin" entityID="https://admin.example.org/shibboleth"/> -->
<ApplicationOverride id="wiki.aai" entityID="https://wiki.aai.niif.hu/shibboleth" > <CredentialResolver type="File" key="wiki.aai.niif.hu.key" certificate="wiki.aai.niif.hu.crt"/> </ApplicationOverride> <ApplicationOverride id="www.aai" entityID="https://www.aai.niif.hu/shibboleth" > <CredentialResolver type="File" key="www.aai.niif.hu.key" certificate="www.aai.niif.hu.crt"/> </ApplicationOverride>
</ApplicationDefaults>
<!-- Each policy defines a set of rules to use to secure messages. -->
<SecurityPolicies>
<!-- The predefined policy enforces replay/freshness , standard condition processing, and permits signing and client TLS. -->
<Policy id="default" validate="false">
<Rule PolicyRule type="MessageFlow" checkReplay="true" expires="60"/> <Rule PolicyRule type="Conditions"> <PolicyRule type="Audience"/> <!-- Enable Delegation rule to permit delegated access. --> <!-- <PolicyRule type="Delegation"/> --> </PolicyRule> <PolicyRule type="ClientCertAuth" errorFatal="true"/> <Rule PolicyRule type="XMLSigning" errorFatal="true"/> <Rule PolicyRule type="SimpleSigning" errorFatal="true"/>
</Policy>
</SecurityPolicies>
 
</SPConfig>
</source>
== Minimális beállítások ===== Környezeti beállítások === 
A konfigurációs fájl első negyedében lévő szekciókban elsősorban a Shibboleth futásával kapcsolatos beállítások találhatók, amelyek alapértelmezett értékei legtöbbször megfelelőek az általunk elvárt működéshez.
* <code>OutOfProcess</code>
* <code>ArtifactMap</code>
=== RequestMap === 
A RequestMap megadja azokat a címeket (Host és Path), amelyeket a Shibboleth SP kezelni fog. Szerkezete:
<source lang="xml">
</RequestMap>
</source>
 
A RequestMap több Host elemet is tartalmazhat, a Host elem 0 vagy több Path elemet tartalmazhat.
{{ATTENTION|Ha 1-nél nagyobb mélységű könyvtárat (pl. a <code>/shibtest/shibreq</code> nevűt) szeretnénk védeni, akkor '''nem''' adhatjuk meg a ''name'' paraméterben a "shibtest/shibreq" értéket, hanem egymásba ágyazott Path elemeket kell használni. A ''name'' paraméter nem tartalmazhat '/' karaktert.}}
* '''<code>redirectError</code>''': átirányítási hiba esetén a Shibboleth erre az oldalra irányít át - ennek az [[isPassive]] -ot használó oldalaknál van jelentősége
==ApplicationDefaults ==Ennél a szekciónál tudjuk megadni az általános, minden alkalmazásra érvényes alapbeállításokat. Ezek a beállítások természetesen minden egyes alkalmazás tekintetében felüldefiniálhatók. ====Alapattribútumok==== * '''<code>id</code> (kötelező)''': a alkalmazás elsődleges belső azonosítója. Az alapbeállíásoknál (tehát itt) elvárt érték: '''<code>default</code>'''* '''<code>policyId</code> (kötelező)''': a vonatkozó id-jű '''<code>SecurityPoilicies</code>''' szekcióra mutat* '''<code>entityID</code> (kötelező)''': egyedi azonosító, amely egyértelműen azonosít egy SP-t. A külső alkalmazások csak ezt az azonosítót látják, belső id-t...stb nem. Többnyire URL formátumú.* '''<code>homeURL</code>''': * '''<code>REMOTE_USER</code>''': egy prioritási listát adhatunk meg, melynek elemei azok az attribútumok, melyek közül az az első nem NULL értékű kerül beállításra a HTTP_REMOTE_USER változóba* '''<code>signing</code>''': az XML üzenetek aláírtságára vonatkozó elvárások állíthatók be* '''<code>encryption</code>''': az XML üzenetek titkosítására vonatkozó elvárások állíthatók be === Sessions === Ennél a szekciónál állíthatjuk be, hogy az SP miként kezelje a Single Sign-on (SSO) folyamatának egyes részeit. Az alapparamétereken túl (session lejárati idő...stb) ún. handlerek találhatók benne. Természetesen az alapbeállítások alkalmazásonként felülírhatók az <code lang="xml"><ApplicationOverride></code> résznél. ====Handlerekről==== A handlerek az SP-n belül működnek, de a fő folyamatoktól leválasztva. Egy-egy speciális feladatot látnak el - mintegy szkript jelleggel. Egy handler a megfelelő URL meghívásával érhető el. Ezen URL meghívásakor az SP felismeri, hogy mely handlert illeti az adott részfeladat megoldása, és átadja neki a feladat ellátásához szükséges paramétereket. Az SP-n belül egy "alaphandler" található, amely felel a handlereket illető feladatok kiosztásáért, ez jelenti majd a handlerek elérési útvonalában a gyökeret.  ====Alapattribútumok====*'''<code lang="xml">handlerURL</code>''': Az alaphandler elérési útja. Alapértelmezés szerint: <code lang="xml">"/Shibboleth.sso"</code>.*'''<code lang="xml">handlerSSL</code>''': Beállítható, hogy kizárólag titkosított csatornán keresztül történhessen a handlerekkel való kommunikáció. Alapértelmezés szerint: <code lang="xml">true</code>*'''<code lang="xml">lifetime</code>''': Beállítható az SP session maximális hossza. Alapértelmezés szerint ez 28800 másodperc. Fontos megjegyezni, hogy az SP session megszűnése nincs közvetlen hatással a Shibboleth által védett alkalmazás által generált sessionre*'''<code lang="xml">timeout</code>''': *'''<code lang="xml">checkAddress</code>''': Megadható, hogy az SP ellenőrizze-e, hogy a felhasználó IP címe egyezik-e az IdP által az asseirton-ben írttal. Alapértelmezés szerint: <code lang="xml">true</code>*'''<code lang="xml">exportLocation</code>''':*'''<code lang="xml">idpHistory</code>''': Igaz érték esetén a SP beállít egy cookie-et, melyhez értékül adja azt az IdP-t, amelynél sikeres autentikáció történt. Alapértelmezés szerint: <code lang="xml">false</code>*'''<code lang="xml">idpHistoryDays</code>''': Megadhatjuk az <code lang="xml">idpHistory</code> cookie érvényességi idejét napokban. Amennyiben nem kerül beállításra, akkor a cookie az adott munkamenet végén lejár  ===SessionInitiator=== Ennél a szekciónál kerülnek beállításra azok a paraméterek, melyek meghatározzák, hogy az SP kihez-mihez irányítsa a felhasználót, mikor az érvényes session nélkül (tehát autentikáció előtt) próbálja elérni a Shibboleth által védett tartalmat.   ====Alapattribútumok====*'''<code lang="xml">'''type'''</code>: Meghatározza a SessionInitiator típusát. A főbb típusokat lásd lejjebb.*'''<code lang="xml">'''Location</code>: Az URL, amely meghívásakor az adott SessionInitiator handler-e aktivizálódik.*'''<code lang= ApplicationDefaults "xml">'''id</code>: (opcionális) Az adott SessionInitiator-re lehet ezen id által hivatkozni egyéb beállításoknál*'''<code lang="xml">'''entityID</code>: Az SP az itt megadott értékben szereplő IdP-hez irányítja az autentikálni kívánó felhasználót*'''<code lang="xml">'''relayState</code>: meghatározza, hogy...*'''<code lang="xml">'''acsByIndex</code>: igaz érték esetén él a lehetőség, hogy a megfelelő AssertionConsumerService-hez ne teljes URI-val forduljunk, hanem elég legyen csak annak indexét megadnunk.*'''<code lang="xml">'''defaultACSIndex</code>: az <code lang="xml">acsByIndex="true"</code> esetén beállítható, hogy alapértelmezés szerint mely indexxel rendelkező AssertionConsumerService-t használjuk ====SessionInitiator főbb típusai====*'''SAML2 SessionInitiator''' (Protocol Handler):<code lang=xml>type="SAML2"</code>SAML2-es autentikációs folyamatot kezdeményez, és érti a SAML2 szabványon alapuló paramétereket. Mindenképp szükséges, hogy kapjon egy <code lang=xml>entityID</code> paramétert, értékében egy valós IdP entityID-jával. *'''SHIB1 SessionInitiator''' (Protocol Handler):<code lang=xml>type="SHIB1"</code>Shibboleth 1.x-es autentikációs folyamatot kezdeményez, és SAML 1.1 szabványon alapuló paramétereket ért. Mindenképp szükséges, hogy kapjon egy <code lang=xml>entityID</code> paramétert, értékében egy valós IdP entityID-jával.*'''SAMLDS SessionInitiator''' (Discovery Handler):<code lang=xml>type="SAMLDS"</code> Az <code lang=xml>url</code> attribútum értékeként megadott helyre irányítja a böngészőt, ahol SAML2 Discovery Service-t vár. A SAML2DS ismeri az [[isPassive]]-ot.*'''WAYF SessionInitiator''' (Discovery Handler):<code lang=xml>type="WAYF"</code> Az <code lang=xml>url</code> attribútum értékeként megadott helyre irányítja a böngészőt, ahol Shibboleth WAYF szolgáltatást vár.*'''Chaining SessionInitiator''': <code lang=xml>type="Chaining"</code> Egy Chaining típusú SessionInitiator elem további SessionInitiator elemeket tartalmazhat, melyek felveszik a keret elem attribútumaiban meghatározott tulajdonságokat. === MetadataProvider === Ennél a szekciónál kell beállítani, hogy az SP milyen forrásokból jut hozzá a szükséges [[Metadata|metaadatokhoz]]. '''A források 3 fő típusa'''* XML MetadataProvider <code type="xml">type="XML"</code> SAML2 szabványos XML fájlt tölt be a rendszer. A fájl lehet lokális, vagy távoli, webszerveren keresztül elérhető. Leggyakrabban használt típus. Példa:  <MetadataProvider type="XML" uri="https://metadata.eduid.hu/current/href.xml" backingFilePath="href.xml" reloadInterval="7200"> <SignatureMetadataFilter certificate="href-metadata-signer-2020.crt"/> </MetadataProvider> A tanúsítvány innen szerezhető be: https://metadata.eduid.hu/certs/href-metadata-signer-2020.crt * Chaining MetadataProviderTovábbi <code lang="xml">MetadataProvider</code>-(eke)t tartalmazhat. * dinamikus, MDQ  <MetadataProvider type="MDQ" id="href-2020" ignoreTransport="true" baseUrl="https://mdx.eduid.hu/"> <MetadataFilter type="Signature" certificate="href-metadata-signer-2020.crt"/> <MetadataFilter type="RequireValidUntil" maxValidityInterval="864000"/> </MetadataProvider> A tanúsítvány innen szerezhető be: https://metadata.eduid.hu/certs/href-metadata-signer-2020.crt ===ApplicationOverride===Amennyiben az SP több alkalmazást kezel, és ezek között az alkalmazások között vannak olyanok, melyeknek valamely tulajdonsága nem egyezik az SP alapértelmezettként megadott tulajdonságaival (jellemzően ilyen lehet pl. az entityID), akkor ezeket ebben a szekcióban felül lehet definiálni.  =Kiegészítő beállítások===POST preservation==Ha legalább 2.2-es verziójú Shibboleth SP-t használunk, úgy lehetőségünk van egy olyan funkció beállítására, amely lehetővé teszi, hogy ha egy felhasználó valamilyen formba ír (pl. egy wikibe), akkor a küldés gomb megnyomásakor a shibboleth egy átmeneti helyen eltárolja a beírt adatokat. Ennek jelentősége, hogy ha írás közben lejárt volna a felhasználó sessionje, így alapértelmezés szerint a bejelentkező oldalra dobná a rendszer, ami által elveszne, amit begépelt, úgy bekapcsolt post preservation esetén ezek az adatok megmenekülnek, nem kell őket újra beírni. A funkció bekapcsolásához a <code><Sessions></code> elem attribútumaként kell megadni az alábbi két név-érték párt.* <code>postData="ss:mem"</code> , az érték mondja meg, hogy a form adatait az SP mely, a konfigurációs fájl elején definiált Storage Service-en keresztül tárolja. Alapértelmezés szerint a memóriában, de lehetőség van külső tároló megadására is. [https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPStorageService További információ a Storage Service-kről] * <code>postTemplate="/etc/shibboleth/postTemplate.html" </code> Hiányossága a funkciónak, hogy ha a form tartalmaz <code>file</code> típusú <code>input</code> mezőt, akkor nem fog működni. =HREF integráció=# Az SP-t regisztrálni kell a [[Resource_Registry#SP_regisztr.C3.A1ci.C3.B3|Resource Registry]]-ben# Le kell tölteni a metadatához tartozó tanúsítványt a [https://metadata.eduid.hu/current/ https://metadata.eduid.hu/current/] címről, és elmenteni a shibboleth kofigurációs fájljait tartalmazó könyvtárba# A [[#MetadataProvider|Metadata]] beállításoknál meg kell adni a HREF metadata elérhetőségét: [https://metadata.eduid.hu/current/href.xml https://metadata.eduid.hu/current/href.xml]# Az <code>attribute-map.xml</code> fájlban el kell távolítani a kommentjeleket azon [[HREFAttributeSpec|attribútumok]] elől, melyeket az SP használni kíván.# Újra kell indítani a shibboleth démont.

Navigációs menü