Módosítások

Shib2SP

13 178 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>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>
===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="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
Ennél a szekciónál kerülnek beállításra azok a paraméterek===ApplicationOverride===Amennyiben az SP több alkalmazást kezel, melyek meghatározzákés ezek között az alkalmazások között vannak olyanok, hogy melyeknek valamely tulajdonsága nem egyezik az SP kihez-mihez irányítsa a felhasználót, mikor alapértelmezettként megadott tulajdonságaival (jellemzően ilyen lehet pl. az session nélkül (tehát autentikáció előttentityID) próbálja elérni , akkor ezeket ebben a Shibboleth által védett tartalmatszekcióban felül lehet definiálni.
Egy SessionInitiator elem további SessionInitiator elemeket tartalmazhat, melyek felveszik a keret elem attribútumaiban meghatározott tulajdonságokat.
=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>
'''SessionInitiator alapattribútumai'''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ü