Hallo Admins,

aufgrund einer aktuellen Konfiguration beschäftige ich mich mal wieder mit ADFS. Heute zeige ich euch, wie eine ADFS-Federation Trust funktioniert und konfiguriert wird.

Account-/ Ressourcenpartner

Ziel soll sein, dass ein Benutzer aus der Organisation asichel.de auf eine Webapplikation bei sichel-it.de mit seinen Anmeldeinformationen authentifiziert wird. Die Webapplikation akzeptiert ADFS-Claims (Ansprüche).

Folgende Informationen und Hinweise zum Aufbau:

  • Das Benutzerkonto ist ausschließlich in der der asichel.de-Domäne angelegt
  • Es existiert kein AD-Trust
  • In beiden Domänen ist eine ADFS-Installation vorhanden
  • Die ADFS-Server können via HTTPS-Protokoll Daten austauschen
  • Es werden öffentliche Zertifikate verwendet
  • Nachfolgende technische Umsetzung erfolgte auf Windows Server 2016
asichel.de ist Accountpartner!
sichel-it.de ist Ressourcenpartner!

Authentifizierungsweg

Wenn ein Benutzer aus asichel.de auf die Webapplikation bei Sichel IT zugreift und sich authentifiziert, werden mehrere Redirects ausgeführt. Das folgende Schaubild soll dies verdeutlichen:

adfs federation trust

 

  1. Der Benutzer öffnet seinen Browser und wechselt zu der URL der Webapplikation.
  2. Die Webapplikation stellt fest, dass noch keine Benutzerauthentifizierung stattgefunden hat und sendet einen Redirect an den Browser des Benutzers mit der URL des ADFS-Dienstes des Ressourcenpartners (Sichel IT).
  3. Der Browser des Clients wechselt nun auf die Webseite des ADFS-Dienstes des Ressourcenpartners. Nun wird abgefragt, wie der Benutzer sich authentifizieren will. Dieser wählt den Namen seiner Organisation aus.
  4. Durch Auswahl seiner Organisation in Schritt 3 erhält der Browser des Clients den Hinweis auf einen Redirect an den ADFS-Dienst des Accountpartners.
  5. Der Browser kontaktiert nun den eigenen ADFS-Server und versucht eine Authentifizierung. Je nach Konfiguration und Browserverhalten kann es sein, dass der Benutzer automatisch angemeldet wird.
  6. Der ADFS-Dienst des Accountpartners prüft die übermittelten Anmeldeinformationen gegen das eigene Active Directory.
  7. Sofern die Anmeldeinformationen (Benutzername / Kennwort) korrekt sind, werden diese an den ADFS-Dienst zurückgegeben.
  8. Der Browser des Benutzers erhält vom ADFS-Dienst (asichel.de) ein Security Token mit der Berechtigung des Zugriffs auf den ADFS-Dienst des Ressourcenpartners (Sichel IT).
  9. Durch einen weiteren Redirect wendet sich der Browser inklusive Security Token an den ADFS-Dienst des Ressourcenpartners (Sichel IT). Dieser erkennt das ausgestellte Token als vertrauenswürdig an, da es von einer konfigurierten Partnerorganisation stammt (asichel.de).
  10. Der ADFS-Dienst (Sichel IT) stellt dem Benutzer nun ein Security Token für den Zugriff auf die Webapplikation aus. Zudem erhält der Browser erneut ein Redirect für die URL auf die Webapplikation.
  11. Der Browser übermittelt nun das ausgestellte und gültige Security Token von Sichel IT an die Webapplikation und wird authentifiziert.

ADFS-Federation Trust aufbauen

Für die Umsetzung ist es wichtig, dass in beiden Organisationen eine ADFS-Serverumgebung implementiert wurde. Die Freigabe des ADFS-Dienstes erfolgt über den ADFS-Proxy /WAP . Wie ADFS aufgebaut wird sowie weiterführende Links findet ihr auf ADFS 4.0 mit Exchange 2016 – Konfigurationsübersicht.

Ich konfiguriere die ADFS-Dienste ausschließlich via Power Shell, da es deutlich einfacher ist als alle Schritte zum Klicken aufzuzeigen. Das Script für den Account- / Ressourcenpartner ist fast identisch.

Accountpartner

Im ADFS des Accountpartners wird eine „Relaying Party Trust (RP)“ mit der Federation URL des Ressourcenpartners erstellt.

$RessourceDomainADFSURI = "adfs.ressourcedomain.de"



    $Rule=@'
        @RuleTemplate = "LdapClaims"
        @RuleName = "Claims"
        c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
        => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", 
        "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn", "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"), query = 
        ";sAMAccountName,userPrincipalName,sAMAccountName;{0}", param = c.Value);
'@

#Create Realaying Party Trust in Account Domain

Add-AdfsRelyingPartyTrust -MetadataUrl https://$RessourceDomainADFSURI/FederationMetadata/2007-06/FederationMetadata.xml -Name "Sichel IT FED Trust" -IssuanceTransformRules $Rule -AccessControlPolicyName "Permit everyone" -AutoUpdateEnabled $true -MonitoringEnabled $true

Über die Power Shell ISE lässt sich das Script leicht auf einem ADFS Server ausführen.

Ressourcenpartner

Im ADFS des Ressourcenpartners wird ein Claim Provider Trust mit der Federation URL des Accountpartners erstellt.

$AccounteDomainADFSURI = "adfs.asichel.de"


    $Rule=@'
        @RuleTemplate = "LdapClaims"
        @RuleName = "Claims"
        c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
        => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", 
        "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn", "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"), query = 
        ";sAMAccountName,userPrincipalName,sAMAccountName;{0}", param = c.Value);
'@



#Create Claims Provider Trust in Ressource Domain

Add-AdfsClaimsProviderTrust -MetadataUrl https://$AccounteDomainADFSURI/FederationMetadata/2007-06/FederationMetadata.xml -Name "asichel.de Accountpartner " -AcceptanceTransformRules $Rule -AutoUpdateEnabled $true -MonitoringEnabled $true

Get-AdfsClaimsProviderTrust "asichel.de Accountpartner" | Set-AdfsClaimsProviderTrust -AnchorClaimType http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn

Abschlusstest

Der Benutzer aus der Domäne asichel.de kann nun den Browser öffnen und auf die URL der Webapplikation zugreifen. Sofern ihr keine Webapplikation zum Testen besitzt –> How To: Build Claims-Aware ASP.NET Web Forms Application Using WIF.

Alternativ kann auch die ADFS-Testseite verwendet werden: https://adfs.asichel.de/adfs/ls/idpinitiatedsignon.asmx !

Der Benutzer in der Accountdomain (asichel.de) ruft im Browser die URL für die Testapplikation auf und wird an den ADFS-Server der Ressourcenpartner weitergeleitet mit der Aufforderung zur Authentifizierung:

 

Nachdem der Benutzer den Link seiner Organisation (asichel.de Accountpartner) ausgewählt hat, wird dieser auf den ADFS-Dienst seiner Organisation umgeleitet und authentifiziert sich automatisch (https://asichel.de/2014/05/14/adfs-sso-exchange-2013-sp1-intern/).

Wie oben beschrieben, wird der Benutzer nun authentifiziert und kann auf die Applikation zugreifen bzw. ist auf dem Ressourcen ADFS-Dienst angemeldet:

 

Damit ist der Aufbau und Test abgeschlossen ;)

Administrativen Gruß aus Bielefeld

Andi