====== IDP als Saml-Proxy zum Entra-ID ====== {{ :de:shibidp:config-advanced:idp-azure2.png?800 |}} ====== Vorwort ====== Die Idee ist es den IDP nicht gegen eine lokale DB zu authentifizieren, sondern die Authentifizierungsanfrage über den IDP-SAML-Proxy gegen das Entra-ID. Dies hat für die, die auch MS365-Dienste benutzen, gewisse Vorteile. - Nach dem Authentifizierungsprozess hat der Benutzer eine gültige Shibboleth-Session gegen den IDP und eine gültige OAuth2-Session gegen das Entra-ID. - Man benötigt zur Implementierung einer MFA-Umgebung jetzt nur noch die Token-Konfiguration im Azure. Man spart sich also den PrivacyIdea-Server plus eine zweimalige Einrichtung der Token. - Die Attribute die dem SP übergeben werden, können sowohl aus der lokaeln DB (LDAP) bezogen werden als auch aus dem Entra-ID. ===== Wie muss ich mir das vorstellen? ===== Der Benutzer möchte sich an einem Webdienst anmelden, wird zum IDP weitergeleitet. Nun kommt statt der Usernamen und Passwortabfrage der Windows-Anmeldedialog. Dort meldet man sich an, der IDP erhält dem Ouath2-CLAIM vom Entra-ID, es werden im User-Consent die Attribute wieder angezeigt die im Filter freigeben sind. Die Auswahl wird bestätigt und fertig. ===== Voraussetzung ===== An den MS365 Diensten meldet man sich mit seiner E-Mail-Adresse an, aus diesem Grunde ist es wichtig, für die Abfrage an die LDAP-DB die E-Mail zur verwenden, um dann für alles Weitere (persitente-ID Generieung, usw.) die UID zu verwenden. Die Konfiguration wurde unter * Debian11, Tomcat9, Shib 4.1.3 konvertiert von 3.x * Debian12, Tomcat10, Shib 5.0 neuinstall getestet. Weiter bildet die Basis zur Umkonfiguration ein funktionierendes System. ===== Konfiguration ===== ==== Umkonfiguration Anmeldekennung ==== Im ersten Schritt sollte die Anmeldung so konfiguriert werden, dass die Benutzer sich mit der E-mail aus dem LDAP anmelden können. Dabei muss sichergestellt werden, dass zur ID (persistenten, subject) Generierung weiterhin das korrekte Attribut verwendet wird (bei uns die UID). conf/ldap.properties #idp.authn.LDAP.userFilter = (uid={user}) idp.authn.LDAP.userFilter = (mail={user}) #idp.attribute.resolver.LDAP.searchFilter = (uid=$resolutionContext.principal) idp.attribute.resolver.LDAP.searchFilter = (mail=$resolutionContext.principal) conf/attribute-resolver.conf In der conf/saml-nameid.properties muss dann der Wert gesetzt sein: idp.persistentId.sourceAttribute = uid Jetzt den Tomcat neustarten und Anmeldung probieren, im zweiten Schritt prüfen, ob die in der DB gespeicherten persistenten IDs korrekt zum SP geliefert werden. ==== Konfiguration Azure ==== === Eine Enterprise-Applikation erstellen === Enterpriese applications | All Applications -> New Application -> Create your own application -> Namen eingeben und den Punkt "Integrate any other application you don't find in the gallery (Non-gallery)” -> Create === SAML konfigurieren: === In der Konfiguration der neuen Applikation auf Overview -> “2. Setup Single sign on” -> SAML * Dann unter Entity-ID: https://DNS-DES-IDPS/idp/shibboleth * und unter Reply-Url: https://DNS-DES-IDPS/idp/profile/Authn/SAML2/POST/SSO eintragen: === Benutzer konfigurieren: === Unter “Users and Groups” einen ersten Benutzer hinzufügen. === Zertifikat und Tenant-ID === Unter Single-Sign-On -> mittig bei “SAML Certificates” die “Federation Metadata XML” herunterladen. Die Konfiguration auf dem Azure ist damit abgeschlossen. ==== IDP ==== === Metadaten === Aus dem Zertifikat und der Tenant-ID und der {{ :de:shibidp:config-advanced:azure_metadata_template.xml |Vorlage}} muss nun eine gültige Metadaten-Datei gebaut werden. Diese dient dann als Vertrauensstellung zwischen dem IDP und dem Entra-ID. Die Metadaten aus dem Azure habe ich nicht ans Laufen bekommen. Aus diesem Grunde muss manuell eine Metadatei erstellt werden. Hierzu steht ein {{ :de:shibidp:config-advanced:azure_metadata_template.xml |Template}} bereit, in dieses Template muss das Zertifikat und die Tenant-ID aus den “Federation Metadata XML” eingefügt werden. Die Metadaten aus dem Azure erst mal formatieren, unter Linux über xmllint. xmllint idp01-test.xml --format > idp01-test-format.xml Nun das Template öffnen und dort die Tenant-ID und das Zertifikat mit dem Daten aus der gerade formatierten Datei ersetzen. Das Zertifikat muss zwischen die “ ” die "Tenant-ID" entsprechnd ersetzen. Die Metadaten-Datein dann unter metadata/azure.xml abspeichern und unter conf/metadata-providers.xml entsprechend laden: Nun sollte der IDP neugestartet werden, zeigt das Log keine Fehler, so war dies vermutlich erfolgreich. Ggf. das Log unter conf/logback.xml erweitern und das Logging auf “DEBUG” stellen. === SAML-Auth konfigurieren === Die Konfiguration einiger Attribute ist aus der Datei “conf/authn/saml-authn-config.xml” in die Datei “conf/authn/authn.properties” gewandert. Wir edititieren die Datei “conf/authn/authn.properties”: Den Wert im Attribut von: idp.authn.flows = Password In: idp.authn.flows = SAML ändern. Dann weiter unten in der Kategorie SAML: (TENANT-ID nicht vergessen zu ändern) idp.authn.SAML.nonBrowserSupported = false idp.authn.SAML.proxyEntityID = https://sts.windows.net/TENANT-ID/ idp.authn.SAML.supportedPrincipals = \ saml2/urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport, \ saml2/urn:oasis:names:tc:SAML:2.0:ac:classes:Password, \ saml1/urn:oasis:names:tc:SAML:1.0:am:password Nun einmal den Tomcat neustarten und es sollte der Azure-Anmeldedialog kommen. === c14n Flow === Wir editieren die Datei conf/c14n/subject-c14n.properties” idp.c14n.attribute.attributeSourceIds = azureName # Allows direct use of attributes via SAML proxy authn, bypasses resolver idp.c14n.attribute.resolveFromSubject = true idp.c14n.attribute.resolutionCondition = shibboleth.Conditions.FALSE Conf/c14/subject-c14.xml Folgende Zeile einkommentieren: In der v5 scheint das Subject zur ID Bestimmung anders zu funktionieren. **Nur für v4.1.x und früher, v5 braucht diese Einstellungen NICHT** nano conf/attribute-resolver.xml nano conf/c14n/attribute-sourced-subject-c14n-config.xml canonicalNameToUseForJoin canonicalNameToUseForJoin **ENDE Konfig v4.x -->** === Daten === Im ersten Schritt die Attribute des Azure definieren, dazu wird unter conf/attributes eine neue Datei angelegt: {{ :de:shibidp:config-advanced:azureclaims.xml |azureClaims.xml}} Dann müssen die Werte geladen werden, dazu einen neuen definieren: Conf/attributes/default-attributes.xml Einen neuen Connector im attribute-resolver.xml definieren. Dann im attribute-filter.xml die Werte für die interne Verarbeitung freigeben. ACHTUNG, die TENANT-ID wieder ersetzen! **Achtung V4.1.x und früher** Die “Conf/attributes/default-attributes.xml” wurde bei meiner Konfiguration nicht geladen. Um dies nachzuholen, muss der folgende Eintrag gesetzt werden: **Es wird nur der AzureClaims.xml geladen damit, sollten die Attribute noch im Resolver definiert sein, nichts kaputt geht.** Nano “conf/services.xml” %{idp.home}/conf/attributes/azureClaims.xml **ENDE Konfig v4.x --->** Nun noch die Attribute zum SP freigeben, Beispiel: nano conf/attribute-filter.xml Nun den Tomcat neustarten und es sollte die Anmeldung gelingen und die Daten an den SP übergeben werden. ENDE :)