Dem SAML SP fehlen Metadaten

Hallo,

ich will gerade eine SAML SP bauen und bin zusätzlich gefrustet, weil das BB Forum gerade meine Post geschrottet hat. Nun ja, also alles nochmal schreiben.

Ich bekommen beim Redirekt zur UCS IdP Loginseite folgende Fehlermeldung:

SimpleSAML_Error_MetadataNotFound: METADATANOTFOUND('%ENTITYID%' => '\'\'')
Backtrace:
3 /usr/share/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php:301 (SimpleSAML_Metadata_MetaDataStorageHandler::getMetaData)
2 /usr/share/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php:321 (SimpleSAML_Metadata_MetaDataStorageHandler::getMetaDataConfig)
1 /usr/share/simplesamlphp/modules/saml/lib/IdP/SAML2.php:303 (sspmod_saml_IdP_SAML2::receiveAuthnRequest)
0 /usr/share/simplesamlphp/www/saml2/idp/SSOService.php:18 (N/A)

Ich habe die Datei MetaDataStorageHandler.php ein wenig um Debug output erweitert:

        public function getMetaDataConfig($entityId, $set) {
                assert('is_string($entityId)');
                assert('is_string($set)');

                SimpleSAML_Logger::warning("Getting MetaData CKO " .
                                                        $entityId . " und ". $set);

                $metadata = $this->getMetaData($entityId, $set);
                return SimpleSAML_Configuration::loadFromArray($metadata, $set . '/' . var_export($entityId, TRUE));
        }

Folgender Log eintrag:

Mar 11 11:10:34 gandalf simplesamlphp[5273]: 6 [726bb71310] SAML2.0 - IdP.SSOService: Accessing SAML 2.0 IdP endpoint SSOService
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 4 [726bb71310] Getting MetaData CKO https://ucs-sso.saml-test.intranet/simplesamlphp/saml2/idp/metadata.php und saml20-idp-hosted
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 7 [726bb71310] Received message:
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 7 [726bb71310] <ns0:AuthnRequest xmlns:ns0="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:ns1="urn:oasis:names:tc:SAML:2.0:assertion" AssertionConsumerServiceURL="http://172.16.200.106:5000" Destination="http://ucs-sso.saml-test.intranet/simplesamlphp/saml2/idp/SSOService.php" ID="id-UMJNvRfZIyt95grFK" IssueInstant="2016-03-11T10:10:35Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Version="2.0">
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 7 [726bb71310]   <ns1:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity"/>
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 7 [726bb71310]   <ns0:NameIDPolicy AllowCreate="false" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 7 [726bb71310] </ns0:AuthnRequest>
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 4 [726bb71310] Getting MetaData CKO  und saml20-sp-remote
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 3 [726bb71310] SimpleSAML_Error_MetadataNotFound: METADATANOTFOUND('%' => '\'\'')
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 3 [726bb71310] Backtrace:
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 3 [726bb71310] 3 /usr/share/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php:301 (SimpleSAML_Metadata_MetaDataStorageHandler::getMetaData)
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 3 [726bb71310] 2 /usr/share/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php:321 (SimpleSAML_Metadata_MetaDataStorageHandler::getMetaDataConfig)
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 3 [726bb71310] 1 /usr/share/simplesamlphp/modules/saml/lib/IdP/SAML2.php:303 (sspmod_saml_IdP_SAML2::receiveAuthnRequest)
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 3 [726bb71310] 0 /usr/share/simplesamlphp/www/saml2/idp/SSOService.php:18 (N/A)
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 3 [726bb71310] Error report with id 9ebe1fc0 generated.
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 7 [726bb71310] /simplesamlphp/saml2/idp/SSOService.php - Template: Could not find template file [error.php] at [/usr/share/simplesamlphp/modules/univentiontheme/themes/univention/default/error.php] - now trying the base template
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 7 [726bb71310] Template: Reading [/usr/share/simplesamlphp/dictionaries/errors]
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 7 [726bb71310] Template: Reading [/usr/share/simplesamlphp/modules/univentiontheme/dictionaries/univention]
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 7 [726bb71310] /simplesamlphp/saml2/idp/SSOService.php - Template: Could not find template file [core:no_metadata.tpl.php] at [/usr/share/simplesamlphp/modules/univentiontheme/themes/univention/core/no_metadata.tpl.php] - now trying the base template
Mar 11 11:10:34 gandalf simplesamlphp[5273]: 7 [726bb71310] Template: Reading [/usr/share/simplesamlphp/modules/core/dictionaries/no_metadata]

Der SP ist konfiguriert und die Datei /etc/simplesamlphp/metadata.d/privacyIDEA.php wurde erzeugt:

<?php
$metadata['privacyIDEA'] = array(
        'AssertionConsumerService'      => array('http://172.16.200.106:5000'),
        'NameIDFormat'  => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',
        'simplesaml.nameidattribute'    => 'uid',
        'simplesaml.attributes' => false,
        'OrganizationName'      => 'NetKnights',
        'authproc' => array(
                10 => array(
                'class' => 'authorize:Authorize',
                'regex' => FALSE,
                'enabledServiceProviderIdentifier' => array('SAMLServiceProviderIdentifier=privacyIDEA,cn=saml-serviceprovider,cn=univention,dc=saml-test,dc=intranet'),
                )
        ),
);

Es ist mein erster SP, insofern kann das mannigfaltige Gründe haben :wink:

Vielen Dank für alle sachdienlichen Hinweise.

Schönen Gruß
COrnelius

Hallo Cornelius,

hast du den SP auch im LDAP angelegt? Kannst du ein LDIF davon schicken? Sind Fehler/Tracebacks in /var/log/univention/listener.log ? DC-Master (→ansonsten Replikation noch nicht fertig)?
Den Fehler habe ich noch nicht gesehen. Könnte ihn mir nur erklären, wenn einfach nur privacyidea.php existiert ohne den entsprechenden include in /etc/simplesamlphp/metadata/metadata_include.php.

Hi Florian,

im listener log passiert irgendwie nichts.

Die includes sieht so aus.

root@gandalf:~# cat /etc/simplesamlphp/metadata/metadata_include.php
<?php
require_once('/etc/simplesamlphp/metadata.d/privacyIDEA.php');
require_once('/etc/simplesamlphp/metadata.d/https:__gandalf.saml-test.intranet_univention-management-console_saml_metadata.php');

Den SP habe ich über die UMC angelegt, steht wahrscheinlich dann im LDAP, oder?

root@gandalf:~# ldapsearch -x -W -D uid=administrator,cn=users,dc=saml-test,dc=intranet  '(SAMLServiceProviderIdentifier=privacyideaSP)'
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=saml-test,dc=intranet> (default) with scope subtree
# filter: (SAMLServiceProviderIdentifier=privacyideaSP)
# requesting: ALL
#

# privacyideaSP, saml-serviceprovider, univention, saml-test.intranet
dn: SAMLServiceProviderIdentifier=privacyideaSP,cn=saml-serviceprovider,cn=uni
 vention,dc=saml-test,dc=intranet
simplesamlAttributes: FALSE
SAMLServiceProviderIdentifier: privacyideaSP
objectClass: top
objectClass: univentionSAMLServiceProvider
objectClass: univentionObject
AssertionConsumerService: http://172.16.200.106:5000
univentionObjectType: saml/serviceprovider
simplesamlNameIDAttribute: uid
isServiceProviderActivated: TRUE
serviceProviderOrganizationName: NetKnights

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Ich will nicht ausschließen, dass an meinem SP was krumm ist. Die Frage ist halt, wo ich noch ein paar mehr Loginfos rauskitzeln kann, was da auf meiner Seite ggf. fehlt.

Schönen Gruß
Cornelius

Kannst du mir die SAML-Nachrichten zeigen, die du an den IDP stellst?
z.b. In Chromium → CTRL+Shift+I öffnet die Console → Network → preserve-requests haken setzen→ SAML-IDP-Login → Rechtsklick auf den Request → Copy as curl

Sieht so aus:

curl 'http://ucs-sso.saml-test.intranet/simplesamlphp/saml2/idp/SSOService.php?SAMLRequest=nVKxbsIwFNz7FZYXpiR2KLSyCCgFIVChIBI6sLmJKVYTO%2FVzKPx9nZQydGDoZPvd3bunex6MTmWBjsKA1CrqUJ90kFCZzqV6jzrbdOo9dkbDu4ECwuLaHtRGfNYCLHIyBcyVI1wbxTQH6Z68FMBsxpJ4uWChT1hltNWZLvBVQG8LOIAw1g2DUfx7HWsFdSlMIsxRZmK7WUT4YG3FgoA%2BhD7t%2ByEhPiV91iOEYDRxA0rFG%2BmVWGfgAWgfeFl41hF8qazhStgAZFkVogGqQxU0ZxjIvAqSZHVx9B2A0XwSYZl7u%2B1smT8%2F1CcC2mz60w%2BHANRirsByZSMcEtr3SNejNKX3rBeyXneH0fqSxJNUbbg3U3j7IQGbpenaW6%2BSFKPXy5KwI%2BCh2whlra9BU21Kbm93bCpu%2BH1LZUJZac8YBcN2sy8OnE%2FWupDZGcVFob%2FGRnArIrznBQj8D4cmW5DOpzUJ%2Fv6f4Tc%3D' -H 'DNT: 1' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: de,en;q=0.8,en-US;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Iridium/46.0 Safari/537.36 Chrome/46.0.2490.80' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Referer: http://172.16.200.106:5000/' -H 'Cookie: SimpleSAMLSessionID=51b33c4e39afc4544546aced78248197' -H 'Connection: keep-alive' --compressed

Please note: Ich gehe über http, nicht über https. Ansich sollte das ja kein Problem sein?

Ich nutzte auf Service Provider Seite pysaml2.

Wie ich vermutet habe lag der Fehler auf meiner Seite.
In den Settings meines SP hat tatsächlich die “entityid” gefehlt, die eben mit der Konfiguration auf dem UCS SAML passen muss!

Ah super, dass das jetzt klappt.

Mastodon