Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:shibidp:config-advanced:config-azure [2024/03/14 15:17] czerner@leuphana.dede:shibidp:config-advanced:config-azure [2024/03/15 14:17] (aktuell) czerner@leuphana.de
Zeile 1: Zeile 1:
 ====== IDP als Saml-Proxy zum Entra-ID ====== ====== IDP als Saml-Proxy zum Entra-ID ======
  
- +{{ :de:shibidp:config-advanced:idp-azure2.png?800 |}}
-  * StatusEntwurf+
  
 ====== Vorwort ====== ====== Vorwort ======
Zeile 25: Zeile 24:
 getestet.  getestet. 
  
-Weiter bildet die Basis zur Umkonfiguration eine funktionierendes System. +Weiter bildet die Basis zur Umkonfiguration ein funktionierendes System. 
  
 ===== Konfiguration ===== ===== Konfiguration =====
Zeile 76: Zeile 75:
  
 Unter Single-Sign-On -> mittig bei “SAML Certificates” die “Federation Metadata XML” herunterladen. Die Konfiguration auf dem Azure ist damit abgeschlossen.  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. 
 +<code>
 +xmllint idp01-test.xml --format > idp01-test-format.xml 
 +</code>
 +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 “<ds:X509Certificate> </ds:X509Certificate>” die "Tenant-ID" entsprechnd ersetzen. 
 +
 +Die Metadaten-Datein dann unter metadata/azure.xml abspeichern und unter conf/metadata-providers.xml entsprechend laden: 
 +<code>
 +<MetadataProvider id="AzureAD-idp-metadata" 
 +        xsi:type="FilesystemMetadataProvider" 
 +        metadataFile="%{idp.home}/metadata/azure.xml" /> 
 +</code>
 + 
 +
 +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”: 
 +<code>
 +Den Wert im Attribut von: idp.authn.flows = Password 
 +
 +In: idp.authn.flows = SAML 
 +</code>
 +ändern. Dann weiter unten in der Kategorie SAML: (TENANT-ID nicht vergessen zu ändern)
 +<code>
 +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 
 + </code>
 +
 +Nun einmal den Tomcat neustarten und es sollte der Azure-Anmeldedialog kommen. 
 +
 +=== c14n Flow  ===
 +Wir editieren die Datei conf/c14n/subject-c14n.properties” 
 +<code>
 +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 
 +</code>
 + 
 +
 +Conf/c14/subject-c14.xml 
 +
 +Folgende Zeile einkommentieren: 
 +<code>
 +<bean id="c14n/attribute" parent="shibboleth.PostLoginSubjectCanonicalizationFlow" />     
 +</code>
 + 
 +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 
 +<code>
 +<AttributeDefinition xsi:type="SubjectDerivedAttribute" 
 +    forCanonicalization="true" 
 +    id="canonicalNameToUseForJoin" 
 +    principalAttributeName="azureName" /> 
 +</code>
 +nano conf/c14n/attribute-sourced-subject-c14n-config.xml 
 +
 +<code> 
 +    <util:list id="shibboleth.c14n.attribute.AttributesToResolve"> 
 +        <value>canonicalNameToUseForJoin</value> 
 +    </util:list> 
 +    <!-- 
 +    A list of attributes to search for a value to produce as the normalized subject name. 
 +    This will normally be something you resolve above. 
 +    --> 
 +    <util:list id="shibboleth.c14n.attribute.AttributeSourceIds"> 
 +        <value>canonicalNameToUseForJoin</value> 
 +    </util:list> 
 +</code>
 +**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 <import> definieren: 
 +
 +Conf/attributes/default-attributes.xml 
 +<code>
 +<import resource="azureClaims.xml" /> 
 +</code>
 +Einen neuen Connector im attribute-resolver.xml definieren. 
 +<code>
 +<DataConnector id="passthroughAttributes" xsi:type="Subject" 
 +   exportAttributes="azureName azureEmailaddress azureDisplayname azureGivenname azureSurname azureTenantid azureObjectidentifier azureIdentityprovider azureAuthnmethodsreferences" /> 
 +</code>
 +Dann im attribute-filter.xml die Werte für die interne Verarbeitung freigeben. ACHTUNG, die TENANT-ID wieder ersetzen! 
 +<code>
 +<AttributeFilterPolicy id="FilterPolicyObject-Proxy-FromAzure-byIssuer-Type"> 
 +    <PolicyRequirementRule xsi:type="Issuer" value="https://sts.windows.net/TENANT-ID/" /> 
 +    <AttributeRule attributeID="azureDisplayname" permitAny="true" /> 
 +    <AttributeRule attributeID="azureGivenname" permitAny="true" /> 
 +    <AttributeRule attributeID="azureSurname" permitAny="true" /> 
 +    <AttributeRule attributeID="azureAuthnmethodsreferences" permitAny="true" /> 
 +    <AttributeRule attributeID="azureIdentityprovider" permitAny="true" /> 
 +    <AttributeRule attributeID="azureTenantid" permitAny="true" /> 
 +    <AttributeRule attributeID="azureEmailaddress" permitAny="true" /> 
 +    <AttributeRule attributeID="azureObjectidentifier" permitAny="true" /> 
 +    <AttributeRule attributeID="azureName" permitAny="true" /> 
 +</AttributeFilterPolicy> 
 +</code>
 + 
 +**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” 
 +<code>
 +    <!-- 
 +    This is suitable for new installs but will usually produce duplicate Attribute 
 +    output if a legacy resolver file is used that contains AttributeEncoders. 
 +    --> 
 +    <util:list id ="shibboleth.AttributeRegistryResources"> 
 +<!--        <value>%{idp.home}/conf/attribute-registry.xml</value> 
 +        <value>%{idp.home}/conf/attributes/default-rules.xml</value> 
 +        <value>%{idp.home}/conf/attribute-resolver.xml</value> --> 
 +        <value>%{idp.home}/conf/attributes/azureClaims.xml</value> 
 +    </util:list> 
 +</code>
 +
 +**ENDE Konfig v4.x --->**
 +
 +Nun noch die Attribute zum SP freigeben, Beispiel:
 +
 +nano conf/attribute-filter.xml
 +<code>
 +   <AttributeFilterPolicy id="Carsten">
 +        <PolicyRequirementRule xsi:type="OR">
 +            <Rule xsi:type="Requester" value="https://DNS/simplesaml" />
 +            <Rule xsi:type="Requester" value="https://DNS/simplesaml/module.php/saml/sp/metadata.php/IDP-Q" />
 +        </PolicyRequirementRule>
 +        <AttributeRule attributeID="uid"                    permitAny="true"/>
 +        <AttributeRule attributeID="eduPersonPrincipalName" permitAny="true"/>
 +        <AttributeRule attributeID="mail"                   permitAny="true"/>
 +        <AttributeRule attributeID="surname"                permitAny="true"/>
 +        <AttributeRule attributeID="givenName"              permitAny="true"/>
 +        <AttributeRule attributeID="sn"              permitAny="true"/>
 +        <AttributeRule attributeID="gecos"              permitAny="true"/>
 +        <AttributeRule attributeID="eppn"              permitAny="true"/>
 +        <AttributeRule attributeID="eduPersonScopedAffiliation" permitAny="true"/>
 +        <AttributeRule attributeID="idmEduGlobalID" permitAny="true"/>
 +        <AttributeRule attributeID="idmEduPersonScopedAffiliation" permitAny="true"/>
 +        <AttributeRule attributeID="persistentId" permitAny="true"/>
 +        <AttributeRule attributeID="subject-id" permitAny="true"/>
 +        <AttributeRule attributeID="idmEduPreferredGivenName" permitAny="true"/>
 +        <AttributeRule attributeID="idmEduPreferredSurname" permitAny="true"/>
 +        <AttributeRule attributeID="eduPersonTargetedID" permitAny="true"/>
 +         <AttributeRule attributeID="samlSubjectID" permitAny="true"/>
 +         <AttributeRule attributeID="samlPairwiseID" permitAny="true"/>
 +            <AttributeRule attributeID="azureTenantid" permitAny="true" />
 +    <AttributeRule attributeID="azureEmailaddress" permitAny="true" />
 +    <AttributeRule attributeID="azureObjectidentifier" permitAny="true" />
 +    <AttributeRule attributeID="azureName" permitAny="true" />
 +
 +</AttributeFilterPolicy>
 +</code>
 +
 +Nun den Tomcat neustarten und es sollte die Anmeldung gelingen und die Daten an den SP übergeben werden. ENDE :)
  
  • Zuletzt geändert: vor 8 Wochen