Office 365 - ADFS intern
Auf den beiden Seiten Office 365 ADFS und Office 365 ADFS Setup bin ich schon auf die ADFS Grundfunktion und die Einrichtung für Office 365 eingegangen. Diese Seite schaut etwas hinter die Kulissen und soll ihnen zeigen, wie ADFS funktioniert und so Sie bei einem Fehler korrigierend oder prüfend eingreifen können-
ADFS installiert ?
Wir sprechen hier nur von der Version ADFS 2.0. Die in Windows 2008R2 und früher enthaltene ADFS-Funktion ist nur die Version 1.0 und nicht für Office 365 geeignet.
Download Microsoft Active
Directory Federation Services 2.0
http://technet.microsoft.com/en-us/evalcenter/ee476597
Ob ADFS bereits installiert ist, können Sie natürlich in der Systemsteuerung - Software erkennen. Sie müssen aber die "Updates"-Ansicht aktivieren, denn das ADFS 2.0 Setup wird in der Systemsteuerung als "Update" eingetragen:
Ein weiter Faktor sind Updates für ADFS. Im Sep 2013 war das Rollup2 aktuell, der als Hotfix nur auf Anforderung versendet wird.
- 2681584 Description of Update Rollup 2 für Active Directory Federation Services (AD FS) 2.0
ADFS im IIS
Der ADFS-Server kann auf einem eigenen Server oder mit auf einem Domaincontroller installiert werden. Der Speicherbedarf ist überschaubar, da er sich im wesentlichen als kleiner Dienst mit einer IIS-Applikation darstellt.
Ich habe schon virtuelle Windows 2008 Server mit gerade mal 1 GB Hauptspeicher als ADFS-Server eingesetzt. Die für den Betrieb von Servern heute erforderlichen Agenten zu Überwachung, Virenschutz und Backup benötigen hier oft schon mehr Speicher.
Überwachung
Aus dem Internet werden Sie in der Regel nur den Pfad "/ADFS" freigeben und auch interne Clients nutzen immer nur diesen Pfad. Da ADFS ein "WebService" ist, können Sie diesen auch abfragen:
https://<fqdn>/adfs/services/trust/mex
https://<fqdn>/federationmetadata/2007-06/federationmetadata.xml
https://<fqdn>/adfs/ls/idpinitiatedsignon.htm
Weiterhin gibt es auch einen weitere URL, die eine XML-Datei liefert.
https://<hostname>/FederationMetadata/2007-06/FederationMetadata.xml
Beide URLs sind insofern ein guter Test, ob ADFS erreichbar ist, das SSL-Zertifikat gültig ist, Firewalls offen sind und der Dienst Informationen liefert.
- Things to Check Before
Troubleshooting AD FS 2.0
http://technet.microsoft.com/de-de/library/adfs2-troubleshooting-things-to-check(v=ws.10).aspx
Interne "automatische" Authentication
Wenn ein Client von einem angesprochenen Dienst zum ADFS-Server verwiesen wird, dann muss er sich natürlich auch am ADFS-Server authentifizieren. Diese Zugriffe und die Anmeldung müssen im IISLog sichtbar sein. Eine fehlerhafte Anmeldung ist hier gut zu erkennen. (IIS-Log gekürzt):
#Software: Microsoft Internet Information Services 7.5 #Version: 1.0 #Fields: cs-method cs-uri-stem cs-uri-query s-port cs-Username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken GET /adfs/ls/ vv=&Username=User%40domain.tld&wa=wsignin1.0&wtrealm=urn:federation:MicrosoftOnline 443 - 192.168.100.12 Mozilla/4.0+(compatible;+MSIE+7.0) 302 0 0 234 GET /adfs/ls/auth/integrated/ vv=&Username=User%40domain.tld&wtrealm=urn:federation:MicrosoftOnline 443 - Mozilla/4.0+(compatible;+MSIE+7.0) 401 2 5 0 GET /adfs/ls/auth/integrated/ vv=&Username=User%40domain.tld&wtrealm=urn:federation:MicrosoftOnline 443 - Mozilla/4.0+(compatible;+MSIE+7.0) 401 1 3221226331 0 GET /adfs/ls/auth/integrated/ vv=&Username=User%40domain.tld&wtrealm=urn:federation:MicrosoftOnline 443 - Mozilla/4.0+(compatible;+MSIE+7.0) 401 1 3221226331 0 GET /adfs/ls/auth/integrated/ vv=&Username=User%40domain.tld&wtrealm=urn:federation:MicrosoftOnline 443 MSXFAQ\fcarius Mozilla/4.0+(compatible;+MSIE+7.0) 200 0 0 234
Interessant sind hier die Fehlermeldungen am Ende der Zeilen:
- 401.2
Diese Meldung der zweiten GET-Zeile ist noch i.O. da der Client so erst mal einen Hinweis bekommt, dass und wie er sich anmelden kann. - 401.1 3221226331
Dieser Code führt dann auf die Spur des Fehlers. Konvertiert man 3221226331 nach Hex (0xC000035B) und sucht danach, dann findet sich ein Artikel in der MSDN über Extended Protection
(Integrated Windows Authentication with Extended Protection http://msdn.microsoft.com/en-us/library/dd639324(v=vs.90).aspx) - 200 (abgesetzte Zeile
Eine erfolgreiche Ticketanforderung erkennen Sie an einem 200 als Statuscode.
Die "Integrierte Anmeldung" funktioniert für Clients natürlich nur, wenn diese auf dem Client auch aktiviert ist.
Ansonsten wird der Anwender nach den Anmeldedaten gefragt. Natürlich spielen hier noch IE Zoneneinstellungen, der verwendete Browser und insbesondere Firewalls und Proxy-Server eine weitere Rolle.
Kerberos
Damit die interne Authentifizierung nicht nur per NTLM sondern auch per Kerberos möglich ist, legt das Setup ein Dienstkonto an. Dies ist erforderlich, wenn in einer ADFS-Farm mehrere Server die Dienste hinter einen Loadbalancer anbieten und daher das gleiche Ticketkennwort verwenden müssen. Im Active Directory können Sie am Dienstkennwort überprüfen, ob ein ServicePrincipalName (SPN) gepflegt ist.
Nur dann kann der Anwender sich per Kerberos am ADFS authentifizieren.
Externe Anmeldung meist nur "Basic" aber bitte mit SSL
Versuchen Sie bitte nicht NTLM von Extern über einen Reverse Proxy auf die interne ADFS-Webseite zu lenken. Das "kann" aber muss nicht gehen. Sehr viele Proxies, Firewalls etc. machen jeden Versuch zunichte, NTLM zu benutzen.
Auch der Zugriff mittels Kerberos von einem Client im Internet ist in der Regel nicht nutzbar, da dazu der Client erst mit einem DC Kontakt haben muss, um ein entsprechendes Ticket zu erhalten. Das kann zwar auch gehen, z.B. wenn der Client per VPN oder insbesondere Direct Access angebunden ist, aber die Regel ist das noch nicht.
Insofern sollten Sie immer auch gewährleisten, dass die Anmeldung per "Basic Authentication" möglich ist, wenn gleich sie dann im Gegenzug natürlich einen SSL-Zwang vorschreiben sollten. Nicht dass die Anmeldedaten bestehend aus Domäne, Benutzername und Kennwort im Klartext übermittelt werden.
IIS Authentication und Extended Protection
So schön Kerberos ist, so knifflig können geänderte Default-Einstellungen unter Windows 2008R2 dies erschweren. Microsoft hat aus Performance-Gründen nämlich die Authentifizierung als "Kernelmode"-Modul konfiguriert. Damit kann der IIS aber nur dann ein Kerberos-Ticket decodieren, wenn der Zugriff auch auf den Computernamen erfolgt aber nicht, wenn Sie z.B.: in einer ADFS-Farm mehrere Server nutzen die ein gemeinsames Dienstkonto verwenden.
Zugegeben wird das in kleinen Installationen nicht auffallen, wenn intern NTLM weiter funktioniert und von extern wie gehabt die Authentifizierung per "Basic" erfolgt. Je größer aber die Firma wird uns insbesondere wenn intern viele Clients sich ein ADFS-Ticket besorgen, sollte die Anmeldung mit Kerberos auch in einer ADFS-Farm funktionieren. Zeit dies im IIS zu ändern:
Die Standardeinstellungen sind.
Pfad | Authentication | Advanced | Provider |
---|---|---|---|
\adfs |
Anonymous |
Entfällt |
Kein |
\adfs\ls |
Anonymous |
Accept
enhanced |
Negotiate |
Die Einstellungen sind unter Authentication hinterlegt, in der die "Enable Kernel-Mode" Authentication"-Einstellung deaktiviert sein muss. Zudem können Sie hier die Extended Protection" aktivieren, damit ein Angreifer sich nicht in die Mittel zwischen Client und ADFS-Server einbinden kann.
Interessant sind vielleicht auch die folgenden Artikel:
- SSO Authentication failure - ADFS keeps on
prompting für credentials
http://community.office365.com/en-us/f/180/p/9918/42973.aspx#42973 - Configuring Advanced Options für AD FS 2.0
and Office 365
http://technet.microsoft.com/en-us/library/hh237448(WS.10).aspx - Konfigurieren der
Windows-Authentifizierung (IIS
7)
http://technet.microsoft.com/de-de/library/cc754628(v=ws.10).aspx - 973917 Description of the Update that implements Extended Protection für Authentication in Internet Information Services (IIS)
- 968389 Extended Protection für Authentication
- Kernel-mode authentication
http://blogs.msdn.com/b/autz_auth_stuff/archive/2011/05/06/kernel-mode-authentication.aspx - IIS 7 and Kernel mode
authentication
http://blogs.msdn.com/b/sudeepg/archive/2009/02/08/iis-7-kernel-mode-authentication.aspx
ADFS im Eventlog
Wie jeder "gute" Dienst nutzt ADFS auch das Windows Eventlog, um beim Start und im Betrieb die ein oder andere Information zu protokollieren. Interessanter sind hier natürlich etwaige Fehlermeldungen, die Sie überwachen sollten. Hier ein "normaler" erfolgreicher Start:
Eine vollständige Auflistung der Fehler und deren Ursachen kann habe ich nicht. Aber mit dem Fehler und einer Suchmaschine ihrer Wahl können Sie viele Ursachen finden. Die folgende Seite zeigt ihnen sogar, wie sie die Debug-Logs für ADFS aktivieren
- Diagnostics in AD FS 2.0
http://blogs.msdn.com/b/card/archive/2010/01/21/diagnostics-in-ad-fs-2-0.aspx - Tools for parsing AD FS logs
(admin events, audits, and debug
logs)
https://GitHub.com/Microsoft/adfsLogTools
ADFS URLS
Active Directory Federation Services basiert auf HTTPS und nutzt verschiedene URLs. Hier mal eine Liste von URLs, die eventuell angesprochen werden.
The Federation Service started successfully. The following service hosts have been added: Federation Server Proxy ServiceHost https://adfs.msxfaq.de:443/adfs/services/proxytrustpolicystoretransfer AD FS 1.x Trust Information Service https://adfs.msxfaq.de/adfs/fs/federationserverservice.asmx SAML Token Issuance ServiceHost net.tcp://localhost:1501/samlprotocol https://adfs.msxfaq.de/adfs/services/trust/samlprotocol/proxytrust Issuance ServiceHost http://localhost:80/adfs/services/trust/mexsoap https://adfs.msxfaq.de:443/adfs/services/trust/proxymexhttpget/ Issuance ServiceHost https://adfs.msxfaq.de/adfs/services/trust/proxymex https://adfs.msxfaq.de:443/adfs/services/trust/proxymexhttpget/ Issuance ServiceHost https://adfs.msxfaq.de/adfs/services/trust/2005/windowstransport https://adfs.msxfaq.de/adfs/services/trust/2005/certificatemixed https://adfs.msxfaq.de/adfs/services/trust/2005/certificatetransport https://adfs.msxfaq.de/adfs/services/trust/2005/Usernamemixed https://adfs.msxfaq.de/adfs/services/trust/2005/kerberosmixed https://adfs.msxfaq.de/adfs/services/trust/2005/issuedtokenmixedasymmetricbasic256 https://adfs.msxfaq.de/adfs/services/trust/2005/issuedtokenmixedsymmetricbasic256 https://adfs.msxfaq.de/adfs/services/trust/13/kerberosmixed https://adfs.msxfaq.de/adfs/services/trust/13/certificatemixed https://adfs.msxfaq.de/adfs/services/trust/13/Usernamemixed https://adfs.msxfaq.de/adfs/services/trust/13/issuedtokenmixedasymmetricbasic256 https://adfs.msxfaq.de/adfs/services/trust/13/issuedtokenmixedsymmetricbasic256 net.tcp://localhost:1501/adfs/services/trusttcp/windows https://adfs.msxfaq.de/adfs/services/trust/proxytrust https://adfs.msxfaq.de/adfs/services/trust/proxytrust13 https://adfs.msxfaq.de/adfs/services/trust/proxytrustprovisionUsername https://adfs.msxfaq.de/adfs/services/trust/proxytrustprovisionissuedtoken SAML Metadata https://adfs.msxfaq.de/FederationMetadata/2007-06/
Diese URLs können natürlich auch "geprobt" werden.
Zertifikate
Und zuletzt hat ADFS natürlich immer etwas mit Zertifikaten zu tun. ADFS nutzt für die Ausstellung der Tickets ein "SelfSigned"-Zertifikat. Das ist unkritisch, da Sie als Administrator sowieso diese Zertifikat (Ohne Private Key) in die Office 365 Cloud hochladen, damit die Office 365 Services die Tickets prüfen können und Sie als Admin damit diese Zertifikat de facto als "Trusted" addieren. Ein Blick in die MMC zeigt diese Zertifikate an:
Interessant ist hier natürlich, wann so ein Zertifikat abläuft, damit es rechtzeitig erneuert werden kann.
ACHTUNG: Das Token-Signing Zertifikat läuft regelmäßig ab und wenn man es ändert, muss es auch an die Dienste verteilt werden, die auf ihrem ADFS-Server aufsetzen. Wer also hier nicht nur Office 365 nutzt, sollte sich vielleicht ein Zertifikat mit längerer Laufzeit ausstellen.
- Durch einen AD FS
2.0-Tokensignaturzertifikats-Rollover
geht der Zugriff auf alle Office
365-Dienste verloren.
http://technet.microsoft.com/de-de/library/jj933264.aspx - AD FS 2.0: How To Modify The
Duration of
AutoCertificateRollover
Certificates
http://social.technet.microsoft.com/wiki/contents/articles/4588.ad-fs-2-0-how-to-modify-the-duration-of-autocertificaterollover-certificates.aspx - 2383983 A token-signing certificate has expired or was renewed für Office 365 Identity Federation
- Replacing ADFS 2.0 Secure
Communications Certificate –
“The Certificate Cannot Be Processed
http://msryanph.wordpress.com/2013/02/24/replacing-adfs-2-0-secure-communications-certificate-the-certificate-cannot-be-processed/ - AD FS 2.0: How to Replace
the SSL, Service Communications,
Token-Signing, and Token-Decrypting
Certificates
http://social.technet.microsoft.com/wiki/contents/articles/2554.ad-fs-2-0-how-to-replace-the-ssl-service-communications-token-signing-and-token-decrypting-certificates.aspx - Expiring AD FS 2.0 Token
Signing Certificates
http://blog.auth360.net/2012/01/08/expiring-ad-fs-2-0-token-signing-certificates/
ADFS-Datenbank
Wer bei der Installation aufgepasst hat, hat die Installation der "Windows Internal Database" gesehen, die genau genommen eine SQL-Instanz ist, die aber als SQL-Express technisch weniger limitiert ist. Dafür darf diese Datenbank nur von Microsoft für Windows-Dienst genutzt werden. Die Dateien und Endungen sollten ihnen bekannt vorkommen:
Wer einen SQL-Enterprise Manager installiert hat, kann sogar recht einfach als Administrator mal einen Blick in die Datenbank wagen:
Letztlich ist es primär eine Konfigurationdatenbank, die ADFS zur Ablage der Informationen nutzt.
- Administering your Windows
Internal Database
MICROSOFT##SSEE instance
http://www.mssqltips.com/sqlservertip/1577/administering-your-windows-internal-database-microsoftssee-instance/ - Getting Access Into Windows
Internal Database Instance
MICROSOFT##SSEE
http://duitwithsbs.wordpress.com/2008/09/01/getting-access-into-windows-internal-database-instance/
ADFS und PowerShell
Wer ADFS nicht per GUI verwalten will oder Einstellungen ändern möchte, die nicht in der GUI vorhanden sind, muss zwangsläufig per Kommandozeile arbeiten. Dazu gibt es ein passendes PSSnapIn zur Verwaltung von ADFS
PS C:\Windows\system32> Get-PSSnapin Microsoft.Adfs.PowerShell | fl Name : Microsoft.Adfs.PowerShell PSVersion : 1.0 Description : This PowerShell snap-in contains cmdlets used to manage Microsoft Identity Server resources.
Nach dem Import des Snapins können Sie auf eine ganze Menge von Befehlen zugreifen und ADFS quasi komplett automatisiert verwalten.
Ab Windows 2012 R2 ist ADFS kein
PSSnapin sondern ein Modul. Entsprechend ändert sich der
Aufruf
Import-Module ADFS
PS C:\Windows\system32> Get-Command *adfs* CommandType Name ----------- ---- Cmdlet Add-ADFSAttributeStore Cmdlet Add-ADFSCertificate Cmdlet Add-ADFSClaimDescription Cmdlet Add-ADFSClaimsProviderTrust Cmdlet Add-ADFSRelyingPartyTrust Cmdlet Disable-ADFSClaimsProviderTrust Cmdlet Disable-ADFSEndpoint Cmdlet Disable-ADFSRelyingPartyTrust Cmdlet Enable-ADFSClaimsProviderTrust Cmdlet Enable-ADFSEndpoint Cmdlet Enable-ADFSRelyingPartyTrust Cmdlet Get-ADFSAttributeStore Cmdlet Get-ADFSCertificate Cmdlet Get-ADFSClaimDescription Cmdlet Get-ADFSClaimsProviderTrust Cmdlet Get-ADFSEndpoint Cmdlet Get-ADFSProperties Cmdlet Get-ADFSProxyProperties Cmdlet Get-ADFSRelyingPartyTrust Cmdlet Get-ADFSSyncProperties Cmdlet New-ADFSClaimRuleSet Cmdlet New-ADFSContactPerson Cmdlet New-ADFSOrganization Cmdlet New-ADFSSamlEndpoint Cmdlet Remove-ADFSAttributeStore Cmdlet Remove-ADFSCertificate Cmdlet Remove-ADFSClaimDescription Cmdlet Remove-ADFSClaimsProviderTrust Cmdlet Remove-ADFSRelyingPartyTrust Cmdlet Revoke-ADFSProxyTrust Cmdlet Set-ADFSAttributeStore Cmdlet Set-ADFSCertificate Cmdlet Set-ADFSCertSharingContainer Cmdlet Set-ADFSClaimDescription Cmdlet Set-ADFSClaimsProviderTrust Cmdlet Set-ADFSEndpoint Cmdlet Set-ADFSProperties Cmdlet Set-ADFSProxyProperties Cmdlet Set-ADFSRelyingPartyTrust Cmdlet Set-ADFSSyncProperties Cmdlet Set-MsolADFSContext Cmdlet Update-ADFSCertificate Cmdlet Update-ADFSClaimsProviderTrust Cmdlet Update-ADFSRelyingPartyTrust
In diese Liste hat sich hier aber auch ein fremdes Commandlets eingeschlichen, welches nur ein ADFS im Namen hat
Cmdlet Set-MsolADFSContext
Dieses ist für Office 365 natürlich hilfreich, um einen ADFS-Server auszuwählen, wenn der ADFS Server auf einem anderen Server installiert ist.
Troubleshooting und Debugging
Zum Thema Troubleshooting hat Microsoft selbst eine sehr gute Anleitung geliefert, auf die ich gerne verweise.
- Things to Check Before
Troubleshooting AD FS 2.0
http://technet.microsoft.com/de-de/library/adfs2-troubleshooting-things-to-check(v=ws.10).aspx - ADFS Error: Your
organization could not sign you
in to this service
http://community.office365.com/en-us/forums/613/t/1164.aspx - External ADFS error: Your
organization could not sign you
in to this service
http://community.office365.com/en-us/f/178/t/2223.aspx - Configuring Computers für Troubleshooting AD FS 2.0
http://technet.microsoft.com/de-de/library/adfs2-troubleshooting-configuring-computers(v=ws.10).aspx - How to Fix Error ACS50008
http://msdn.microsoft.com/en-us/library/azure/jj571618.aspx
Weitere Links
- ADFS
- ADFS Setup
- Hybrid Identity Required
Ports and Protocols
https://docs.microsoft.com/de-de/azure/active-directory/hybrid/reference-connect-ports - Integrated Windows
Authentication with Extended
Protection
http://msdn.microsoft.com/en-us/library/dd639324(v=vs.90).aspx - SSO Authentication failure -
ADFS keeps on prompting für credentials
http://community.office365.com/en-us/f/180/p/9918/44963.aspx - Cross Organization Single Sign-on Made Real
With ADFS
http://technet.microsoft.com/en-us/edge/ff945074 - Troubleshooting ADFS Problems
http://technet.microsoft.com/de-de/library/cc780686(WS.10).aspx - Troubleshooting User-Reported
Symptoms für AD FS 2.0
http://technet.microsoft.com/en-us/library/adfs2-troubleshooting-User-reported-symptoms(WS.10).aspx - First Impressions – AD FS
and Windows Server 2012 R2
Part I https://blog.auth360.net/2013/09/13/first-impressions-ad-fs-and-windows-server-2012-r2-part-i/
Part II https://blog.auth360.net/2014/01/07/first-impressions-ad-fs-and-window-server-2012-r2-part-ii/