Aplikace EZproxy (dodává OCLC Inc.) je dodávána s podporou autentizace v prostředí Shibboleth/SAML. U EZproxy je vlastní implementace Service Providera.
Parametry pro autentizaci se nastavují v konfiguračním souboru. Po aktivaci přihlašování a nastavení mapování skupin uživatelů jsou k dispozici tyto funkce:
Implementace Shibboleth/SAML nepodporuje Single Logout.
Odkaz na konfiguraci Shibboleth na webu OCLC.
Konfiguraci Shibboleth u EZproxy představuje Petr Novák na semináři Shibboleth v praxi v Národní technické knihovně - prezentace, videozáznam.
V EZproxy je nutno nakonfigurovat X.509 certifikát pro podepisování a šifrování komunikace s IdP. Doporučené parametry:
délka klíče 2048 bitů CN=login.hostname.domain.tld Organizace=jméno organizace
Pro vygenerování certifikační žádosti je možno použít jak vestavěný generátor certifikátů EZproxy dostupný z webového admin rozhraní (http://login.hostname.domain.tld/ssl-new?shibboleth=on), tak např. nástroj openssl - odkaz na návod OCLC.
Doporučuje se nasadit serverový certifikát CA TERENA (více viz. služby CA CESNET). Tento certifikát neslouží pro autentizaci meziserverového SSL spojení (EZproxy ↔ informační zdroj) – pro tento účel má být použit jiný, tzv. hvězdičkový certifikát, vystavený na CN=*.hostname.domain.tld
EZproxy obsahuje generátor metadat.
Ukázka metadat - polotovar metadat generovaný EZproxy (odkaz Certificate Metadata dostupný v EZproxy na URL http://domain.tld/shibboleth):
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> <md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol http://schemas.xmlsoap.org/ws/2003/07/secext"> <md:Extensions> <idpdisc:DiscoveryResponse Binding="urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol" Location="https://login.ezproxy.is.cuni.cz/Shibboleth.sso/DS" index="1" xmlns:idpdisc="urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol"/> </md:Extensions> <md:KeyDescriptor> <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:X509Data> <ds:X509Certificate>MIIEhDCCA2ygAwIBAgIQA+Tm7A+sXd+JKGnXJsvwLTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTIyMjAwMDAwMFoXDTEyMTIyMTIzNTk1OVowVzELMAkGA1UE BhMCQ1oxJTAjBgNVBAoTHENoYXJsZXMgVW5pdmVyc2l0eSBpbiBQcmFndWUxITAf BgNVBAMTGGxvZ2luLmV6cHJveHkuaXMuY3VuaS5jejCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAKXw1e19JpiQeBt6S0NPMFiebt2XveiVoNPkJgfMdKbM rD91zJxuLm7kxAUIp24iYlv5B/5avGUaIXNgfXXuL2uB7O74gom2fUQuZMIXbK+r MTP0u/iXDVOdmDKfP2sxZcgDjBUwabVh0QxNERdj4AF8j/p9MyR2ifFs5ZA9Aybn AceRs3iXutc0/qxdfEIPUKqxXh8DX5hfvpzLq1z/pqjZaDJ1kD9SroxRJkTt3MOW Fv0TCu66dDpOmN5pNnpxtF5ELQHIO4nStgoktQoCi6xZ4Cw+eshyBdy/rzCuySDY SrTBAG7UUUrQvfNNGr9MmEDdb8OxuQ4ojp5lMv5Z1CUCAwEAAaOCAWswggFnMB8G A1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBQaQRwoYI9v J01LmNiWQuBEAgQ9MTAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNV HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIx AQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3Jn L1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0 dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUF BzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzAjBgNVHREEHDAaghhsb2dp bi5lenByb3h5LmlzLmN1bmkuY3owDQYJKoZIhvcNAQEFBQADggEBAJnUSqvJjiny IYRggUFQP+o46sf8wf3WM7xDOncBwuS5y+RSiCvRfftIYrf9R7WnXEcnpIPmugrj vgwoPyqQhcOu/alnp69ogjkS1b1mKKSKyUkhLIUsFsw+9Sh8iLEqboeWJVDhD3v3 OBAPbfWNZCXcTcXoIxk9PsiP0fGFO6EVw3tV9vGBTBYfUApiRDKOvO3xLPkSsmJh Lyj3jXth52Fp/1wHmZ5q4pR4gw83C1fla3q5ylMvksmlr4tLaCR0NX5fZzD2fCnG gbjp6yF2aheE4G+/ouASbZy6fijs58IAHczfB36XXBe7zcUS8VnW4y88WsDCH+Jv 2Dyuki1c8zY= </ds:X509Certificate> </ds:X509Data> </ds:KeyInfo> </md:KeyDescriptor> <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.ezproxy.is.cuni.cz/Shibboleth.sso/SAML2/POST" index="1" isDefault="true"/> <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="https://login.ezproxy.is.cuni.cz/Shibboleth.sso/SAML2/Artifact" index="2"/> </md:SPSSODescriptor> </md:EntityDescriptor>
První tag je tzv. EntityDescriptor – je nutno doplnit entityID jako je v tomto příkladu:
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://login.domain.tld/sp/shibboleth">
EntityID je nutno zkonzultovat se správcem IdP v instituci.
Webové rozhraní obsahuje Assertion Consumer Service URL, která se následně využije v metadatech EZproxy.
Pro testovací účely není nutné zapojit EZproxy do federace. Metadatový soubor v tomto případě umístíme do adresáře s binárním souborem ezproxy. Součástí tohoto metadatového souboru musí být metadata příslušného Identity Provideru.
config.txt (ezproxy.cfg – v pre 5.x verzích)
Formát konfigurace:
ShibbolethMetadata \ -EntityID=EZproxyEntityID \ -File=MetadataFile \ -Cert=EZproxyCertNumber \ -URL=MetadataURL
Příklad EZproxy UK
ShibbolethMetadata \ -EntityID=https://login.ezproxy.is.cuni.cz/sp/shibboleth \ -File=MetadataFile \ -Cert=1 \ -URL=http://www.eduid.cz/docs/eduid/metadata/eduid-metadata.xml
Soubor user.txt
udržuje informace o lokálních uživatelích EZproxy + definuje další autentizační mechanismy.
::Shibboleth If login:auth eq "shibboleth"; IDP20 https://cas.cuni.cz/idp/shibboleth /Shibboleth
Popsaná konfigurace nedává možnost výběru IdP (vynechá WAYF). Pokud požadujeme WAYF, musíme upravit – doplnit URL Directory Service:
::Shibboleth If login:auth eq "shibboleth"; DS20 https://ds.eduid.cz/wayf.php /Shibboleth
<a href="/login?auth=shibboleth&url=^U">Přihlaste k EZproxy se pomocí Shibboleth </a>
Podle nastavení user.txt se zobrazí přímo přihlášení k žádanému IdP nebo se zobrazí služba výběru IdP (WAYF / DS služba).
WAYFless linkování na zdroj – odkaz si generuje EZproxy, příklad = SpringerLink:
https://login.domain.tld/login?auth=shibboleth&url=http://ebooks.springerlink.com
Používá se pro definování přístupu dle skupin, typicky: fakulty, základní součásti, pracoviště, čtenáři, zaměstnanci – s rozdílným portfoliem zpřístupněných předplacených zdrojů.
Definice příkazem Group FACULTY1 v config.txt
předcházejícím vlastní konfiguraci zdroje.
Lze kombinovat Group FACULTY1+FACULTY2 …
Na skupiny lze namapovat afiliace předané prostřednictvím Shibbolethu. U EZproxy k tomu slouží pravidla definovaná v souboru shibuser.txt
.
Obsah shibuser.txt
MsgAuth
ukládá autentizační hlášky do messages.txt, po odladění možno vypnout
Set login:loguser=auth:eduPersonTargetedID
stanoví, že EZproxy definuje předané eduPersonTargetedID jako přihlašovací jméno
If !(auth:issuer eq "https://cas.cuni.cz/idp/shibboleth"); \ Deny unaffiliated.html
test zda uživatel přichází od požadovaného IdP, pokud ne, je mu přístup odepřen
Group NULL
inicializace skupin
If Any(auth:eduPersonAffiliation, "staff"); Group +Staff
otestujeme základní skupiny uživatelů (staff, student, …) a přiřadíme ke skupině
IfNoGroups { If auth:eduPersonAffiliation eq "interrupted-student"; Deny deny_interrupted.html Deny deny_other.html }
pokud příchozí uživatel nespadá do povolené skupiny, zamítneme přístup
Group +Default
definujeme skupinu Default všem, kdo prošli až sem
If Any(auth:eduPersonEntitlement, "urn:uni:affiliation:staff@domain.ltd"); Group +FACULTY1
testujeme a přiřazujeme skupiny dle fakult, číselníků kateder, studijních programů, oborů a dalších atributů (přístup lze definovat až na úroveň jedince)
Průběh autentizační session je k dispozici ve webovém rozhraní:
http://domain.tld/messages?last=100
Požadovaný scénář: Při připojení k elektronickému informačnímu zdroji přes EZproxy server z počítače, jenž je připojen k počítačové síti instituce (přímo či přes VPN) a jehož IP adresa spadá do definovaného rozsahu IP adres instituce, není požadována autentizace. Při připojení k elektronickému informačnímu zdroji přes EZproxy server z počítače, jenž není připojen k počítačové síti instituce a jehož IP adresa nespadá do definovaného rozsahu IP adres instituce, je požadována autentizace.
Řešení: Ke konfiguraci každého zdroje (většinou tvořenou příkazy TITLE, URL, DOMAIN, HOST aj) v souboru config.txt je nutno přidat rozsah IP adres instituce (nebo části instituce, např. fakulty). Tento rozsah se přidává 2x - před a za konfiguraci zdroje.
Příklad:
AutoLoginIP 192.168.0.1-192.168.0.254 Title Databáze XY URL http://www.databaze.com D databaze.com IncludeIP 192.168.0.1-192.168.0.254
IP adresy mohou být jak privátní, tak veřejné. Rozsahy je možné sdružovat (zápis vždy na nový řádek), pokud má instituce více rozsahů. Páry příkazů AutoLoginIP a IncludeIP se musí nacházet vždy v rámci jedné skupiny a mohou definovat přístup k více zdrojům. V EZproxy logu se místo uživatelského jména (eduPersonTargetedID, pokud je nastaveno) zobrazí uživatelské jméno “auto” a jako skupina (skupiny) uživatele se použije skupina, v níž je umístěna konfigurace zdroje.
Při certifikace rollover polovina přihlášení u EZproxy končí s chybou - EZproxy nepodporuje korektně certificate rollover.