it-swarm.com.de

SAML 2.0: Konfigurieren der URL des Assertion Consumer Service

Ich implementiere einen SAML 2.0 Service Provider, der Okta als Identitätsanbieter verwendet. Ich möchte die ACS-URL (Assertion Consumer Service) so konfigurieren, dass der SAML 2.0 von meiner Service Provider-App in der Assertion wiedergegeben wird.

Ich stelle jedoch fest, dass der Okta Identity Provider stattdessen den in der Okta-Konfiguration konfigurierten SSO-Endpunkt sendet und das tatsächlich gesendete ACS ignoriert. Außerdem bekomme ich einen Fehler. Möglicherweise stimmt das ACS von SP nicht mit den Metadaten überein.

Wenn die ACS-URL nicht der richtige Weg ist, eine kurze ID an IDP zu senden, damit diese in der Assertion wiedergegeben wird, welcher andere Mechanismus für diesen Zweck verwendet werden kann.

Beispiel:

Die von der App SP gesendete SAML 2.0-SAMLRequest lautet:

assertion_consumer_service_url: https: //Host.com:port/saml/consume? entityId = N & myName = Benutzername

Die Konfiguration auf Identity Provider enthält die Metadaten:

URL für einmaliges Anmelden: Https: //Host.com:port/saml/consume?entityId=N

Beachten Sie, dass sich myName von einer Anfrage zur nächsten ändert, da auf diese Weise überprüft werden kann, ob die Antwort name_id enthält, die dem ursprünglich gesendeten Benutzernamen entspricht.

Wenn es dem Dienstanbieter eine Möglichkeit gibt, den Identitätsanbieter bestätigen zu lassen, dass ein von einem SP verwalteter Name (z. B. Benutzername) verwendet wird, wäre dies für unsere Anforderungen in Ordnung. Wie spezifiziert man das?

Vielen Dank

15
Venkat Rangan

In SAML wird angenommen, dass der ACS für einen SP statisch ist. Um die Antwort mit der ursprünglichen AuthnRequest zu korrelieren, sollten Sie die ID der ausgehenden AuthnRequest speichern und dann die InResponseTo der erhaltenen Antwort verwenden.

Der SP kann der AuthnRequest einen Betreff hinzufügen, der dem IdP mitteilt, welchen Benutzernamen Sie authentifiziert haben möchten. Sie ist in Abschnitt 3.4.1 in der Spezifikation SAML2 Core definiert.

11
Anders Abel

Wie Anders Abel betonte, sei der ACS statisch. In einer Entwicklungsumgebung kann es jedoch sein, dass eine dynamischere Reaktion auf verschiedene Testsysteme erforderlich ist. 

Dies ist mein saml20-sp-remote.php, mit dem ich auf alle SP antworte, die eine SSO-Authentifizierung erfordern, und dabei das Attribut AssertionConsumerService seiner Anforderungen verwendet. Ich denke, das ist für die Produktion nicht sicher. 

simplesamlphp/metadata/saml20-sp-remote.php:

<?php
/**
 * SAML 2.0 remote SP metadata for SimpleSAMLphp.
 *
 * See: https://simplesamlphp.org/docs/stable/simplesamlphp-reference-sp-remote
 */
$acs = \SAML2\Binding::getCurrentBinding()->receive()->getAssertionConsumerServiceURL();
if (!$acs) $acs = 'some_fallback_url';

$metadata['idp_identifier'] = array(
    'AssertionConsumerService' => $acs,
    'simplesaml.nameidattribute' => 'uid'
);
0
Rokus