Metadane SAML
Metadane SAML opisują, w jaki sposób ma być realizowana komunikacja pomiędzy IdP i SP. Metadane są typowo prezentowane w postaci XML - w takiej formie jest realizowana publikacja metadanych i ich wymiana. Wewnętrznie, np. SimpleSAMLphp przechowuje metadane w postaci tablic zawierających definicje zmiennych.
Aby zrozumieć zawartość metadanych, trzeba mieć podstawową znajomość XML-a oraz przestrzeni nazw.
Specyfikacja standardu OASIS Metadata for the SAML v. 2.0 definiuje zasady prezentacji takich informacji o obiektach SAML, zwanych encjami (entities), jak: identyfikatory encji (entity ID), punkty dostępu do usługi (endpoints), certyfikaty. Najnowsza errata tej specyfikacji to dokument z 2009r.
Encja, obiekt SAML to pop prostu usługa SAML działająca na jakimś serwerze, realizująca protokół SAML i pełniąca funkcję dostawcy tożsamości (IdP) lub dostawcy usługi (SP). Encje mają unikatowe nazwy, publikowane jako entityID.
W metadanych encje są prezentowane jako elementy <md:EnityDescriptor>.
Element <md:EnityDescriptor> definiuje metadane pojedynczej encji. Ta sama encja może występować w różnych rolach, m.in.:
Dostawca tożsamości - Identity Provider (IdP)
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
entityID="https://..../idp/shibboleth">
...
<md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
...
</md:IDPSSODescriptor>
</md:EntityDescriptor>
W metadanych IdP występują następujące elementy:
- klucz publiczny - element
- wskazanie punktów dostępowych - elementy ,
- wspierane identyfikatory - element
- wspierane atrybuty - element
Dostawca usługi - Service Provider (SP)
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
entityID="https://.../shibboleth">
...
<md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
...
</md:SPSSODescriptor>
</md:EntityDescriptor>
W metadanych SP występują następujące elementy:
- klucz publiczny - element <md:KeyDescriptor>
- wskazanie punktów dostępowych - elementy <md:SingleLogoutService>, <md:AssertionConsumerService>, <md:ManageNameIDService>
- wspierane identyfikatory - element <md:NameIDFormat>
- atrybuty, które są potrzebne SP - element <md:AttributeConsumingService>
Dane adresowe/kontaktowe
W metadanych są również umieszczane dane kontaktowe związane z usługą. Zazwyczaj są podawane przed zamykającym elementem .
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
entityID="https://.../idp/shibboleth">
Metadane związane z rolą (IdP/SP)
<md:Organization>
<md:OrganizationName xml:lang="pl">.....</md:OrganizationName>
<md:OrganizationName xml:lang="en">.....</md:OrganizationName>
<md:OrganizationDisplayName xml:lang="en">.....</md:OrganizationDisplayName>
<md:OrganizationDisplayName xml:lang="pl">.....</md:OrganizationDisplayName>
<md:OrganizationURL xml:lang="pl">http://www.example.org/</md:OrganizationURL>
<md:OrganizationURL xml:lang="en">http://www.example.org/</md:OrganizationURL>
</md:Organization>
<md:ContactPerson contactType="support">
<md:EmailAddress>mailto:.....</md:EmailAddress>
</md:ContactPerson>
<md:ContactPerson contactType="technical">
<md:EmailAddress>mailto:.....</md:EmailAddress>
</md:ContactPerson>
</md:EntityDescriptor>
Informacje dodatkowe - rozszerzenie MDUI
W metadanych IdP i SP powinny być definiowane dodatkowe informacje umożliwiające bardziej przyjazną prezentację informacji o instytucji realizującej logowanie i o udostępnianej usłudze. Specyfikacja SAML V2.0 Metadata Extensions for Login and Discovery User Interface (MDUI)dokument OASISokreśla specjalne rozszerzenie umożliwiające wpisywanie wielojęzycznych opisów, nazw usług, umieszczanie znaku logo oraz podawanie precyzyjnych danych dotyczących położenia usługodawcy.Zaleca się dodanie w metadanych następujących elementów:
<mdui:DisplayName>
<mdui:Description>
<mdui:InformationURL>
<mdui:Logo>
Rozszerzenie MDUI wprowadza się w ramach bloku lub , w elemencie .
Przykład:
<md:Extensions>
<mdui:UIInfo xmlns:mdui="urn:oasis:names:tc:SAML:metadata:ui">
<mdui:DisplayName xml:lang="en"> PIONIER Consortium</mdui:DisplayName>
<mdui:DisplayName xml:lang="pl">Konsorcjum PIONIER</mdui:DisplayName>
<mdui:Description xml:lang="en">PIONIER Consortium Identity Provider</mdui:Description>
<mdui:Description xml:lang="pl">Dostawca Tożsamości Konsorcjum PIONIER</mdui:Description>
<mdui:Logo xml:lang="en" height="44" width="111">https://aai.pionier.net.pl/images/logo_pionier.gif</mdui:Logo>
</mdui:UIInfo>
</md:Extensions>
Uwaga:
- we wszystkich elementach przenoszących nazwę instytucji podajemy oficjalne nazwy w języku polskim (xml:lang="pl") oraz angielskim (xml:lang="en")
- znacznik mdui:Logo musi wskazywać adres logo podany w sposób bezpieczny (https://) wymiary logo (width i height) nie mogą przekroczyć odpowiednio 240px i 180px.
Definicja obsługiwanych domen (dot. IdP)
Identity Provider (IdP) musi definiować, domeny które są obsługiwane przez dany serwer uwierzytelniający. Służy do tego element <shibd:Scope> umieszczany w ramach bloku <md:IDPSSODescriptor> w ramach <md:Extensions>. Przykład:
<md:EntityDescriptor ...>
<md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:Extensions>
<shibmd:Scope regexp="false">example.pl</shibmd:Scope>
<shibmd:Scope regexp="false">student.example.pl</shibmd:Scope>
</md:Extensions>
</md:IDPSSODescriptor>
...
</md:EntityDescriptor>
Dostarczanie i pobieranie metadanych
Dostawca tożsamości (IdP), aby mógł kontaktować się dostawcami usług, musi mieć w swojej konfiguracji metadane tych dostawców.Podobnie dostawca usługi (SP), aby realizować logowanie federacyjne musi dysponować metadanymi dostawców tożsamości (IdP), za pośrednictwem których logują się użytkownicy.Na potrzeby testów, czy w celu kontaktu z konkretnymi dostawcami tożsamości/usług SP/IdP może utrzymywać lokalne kopie metadanych. Kopie takie powinny być pobierane w sposób bezpieczny i SP/IdP musi dbać o ich odświeżanie.Najlepszą metodą dostarczania metadanych do usługi jest korzystanie ze ze zdalnych metadanych przygotowanych i podpisanych przez federację.PIONIER.Id przygotowuje następujące metadane, patrz https://pionier.net.pl/pionierid/pionier-id/metadane/:
- wszystkie zarejestrowane w polskiej federacji IdP i SP http://aai.pionier.net.pl/pionierid.xml
- metadane eduGAIN łącznie z polskimi IdP, SP https://aai.pionier.net.pl/pionierid-edugain-feed.xml
- wszystkie SP zarejestrowane w eduGAIN łącznie z polskimi SP https://aai.pionier.net.pl/pionierid-edugain-sp-feed.xml
- wszystkie IdP zarejestrowane w eduGAIN łącznie z polskimi IdP https://aai.pionier.net.pl/pionierid-edugain-idp-feed.xml