18. April 2022
Etiketten:#Schlüsselumhang #oauth2 #oidc #Authentifizierung # Identitätsmanagement
Was sich in den letzten Jahren im Bereich der allgemeinen Anwendungsentwicklung durchgesetzt hat – nämlich der Rückgriff auf und die Verwendung von Bibliotheken, Frameworks und Servern, die uns Entwicklern das Leben erleichtern und sich nicht mehr mit der detaillierten Bearbeitung von Anfragen/Antworten oder der Implementierung von Servlets beschäftigen scheint seinen Weg zu finden. Sicherheit, insbesondere Authentifizierung. Ein willkommener Trend.
Dieser Text erschien erstmals inJava-Magazin 7.2022
Leider hat sich die Meinung zu lange durchgesetzt„Oh, wir könnten diese Tabelle mit Benutzernamen und Passwörtern genauso gut behalten.“Wir alle wissen, dass schnell viel mehr erledigt wird, die Anforderungen sehr hoch sind und die Umsetzung und Wartung des Gesamtprojekts mehr Zeit und Aufwand erfordert, als wir zunächst dachten. Der Einsatz von Sicherheits-Frameworks und Bibliotheken bringt uns hier nur einen Teil davon. Ganz zu schweigen von potenziellen Sicherheitslücken, die wir versehentlich geschaffen haben, weil wir derzeit nicht die nötigen Sicherheitsexperten sind.
Angesichts der wachsenden Zahl von Apps, mobilen Apps und verteilten APIs war der Umgang mit Benutzer- und Kundenidentitäten und deren erfolgreiche Authentifizierung noch nie so einfach.SAML-SpezifikationenSie haben hier einen ziemlich guten Standard gesetzt, aber es ist ziemlich schwer, ihm zu folgen, insbesondere aufgrund seiner Geschichte.
OAuth2 und OIDC
Um die Anwendung zu vereinfachen und sich an neue technologische Gegebenheiten anzupassen, wurde vor 10 Jahren dieOAuth2-SpezifikationAllerdings hat OAuth2 weniger mit der Authentifizierung eines Benutzers und seiner Identität zu tun; Tatsächlich lässt OAuth2 diese Daten weg. Die Spezifikation betrifft die Berechtigung, die der Benutzer (Ressourceneigentümer) dritte (Klient, hauptsächlich eine Serveranwendung), um auf Daten zuzugreifen (Ressourcen) auf einem System (Quelle) (Ressourcenserver). Dazu muss sich der Benutzer noch bei der Domäne des Quellsystems authentifizieren, um den Zugriff zu autorisieren.Autorisierungsservervielmehr bedeutet es, dass es (nicht unbedingt) Referenzen nach außen gibt (und wenn ja, dann nicht auf standardisierte Weise).AutorisierungsserversetzenRessourceneigentümerdann einZugangstokende (enthält die Autorisierung für die veröffentlichten Daten), das heißtKlientcomClientID-/-GeheimnisKombination dannAutorisierungsserverLaden Sie es herunter und nutzen Sie es, um auf die Daten zuzugreifenRessourcenserverkann Zugreifen.
Das mag auf den ersten Blick etwas verwirrend erscheinen, da es neu ist. Es kommen auch viele neue Begriffe ins Spiel. Schließlich sind die OAuth2-Spezifikation und dieSubventionen(Verfahren, wie z. B. wer istALSauthentifiziert und autorisiert den Zugriff), die OAuth2 definiert, aber eine ziemlich verständliche Definition. Leider definiert es das nicht alsKlient, also ein Dritter, den der Nutzer selbst identifizieren kann. Dies war bei der Spezifikationserstellung auch nicht erwünscht, schließlich wollte man lediglich eine Spezifikation zur Autorisierung von Dateneigentümerdaten zwischen Anwendungen erstellen, Clients möchten bzw. benötigen aber dennoch Informationen über die Identität des Benutzers. Die meisten OAuth2-Server stellen auch (einigermaßen) Daten über den Benutzer bereit, aber leider kann man sich nicht immer darauf verlassen und auch nicht wirklich auf das Format. Zwei verschiedene OAuth2-Server können zwei völlig unterschiedliche Informationen über den Benutzer bereitstellen.
an diesem Punkt jetztMelden Sie sich bei OpenID an(Abkürzung: OIDC) (nicht zu verwechseln mit „OpenID“, Erläuterung siehe Link). OIDC nutzt klar definierte und standardisierte Mittel und Endpunkte, über die Benutzeridentitäten einheitlich und zuverlässig geteilt und genutzt werden können. Es ist fast wie ein einzelnes Abzeichen. Technisch basiert OIDC vollständig auf den zuvor erwähnten OAuth-_Grants_ und trägt im Wesentlichen die folgenden zusätzlichen Standards:
ID-Tokens und JWTs
zusätzlich zuZugangstoken, das den Zugriff auf Daten autorisiert, daher der NameZugang, übermittle esID-Do-TokenÖIdentitätstokenBenutzeridentitätsdaten Einerseits definiert der OIDC das Format des Tokens selbst, dasStandard-JSON-Web-TokenIn OAuth2 kann auch ein Zugriffstoken aufgerufen werdenundurchsichtigein Token sein, d. h. eine unsinnige Zeichenfolge, die zuerst verwendet werden muss, bevor sie verwendet werden kann oder damit der Client weiß, womit das Token verknüpft istAutorisierungsserverEin JWT ist einunabhängigToken und kann auch ohne Überprüfung auf dem Server gelesen und verwendet werden.
Neben dem Format definiert der OIDC auch den Inhalt der Token-ID. Genauer gesagt, welcheAnsprüche(Attribute) auf dem identifizierenden Token, für den die Informationen verwendet werden. Auf diese Weise kann ein Verbraucher sicher sein, dass z.B. der Name eines Benutzers im AnspruchVorname
übertragen, nicht wieName
oder eine andere Ressource.
Da der Token jedoch nicht unbedingt verschlüsselt ist und daher von jedem/vom System eingesehen und gelesen werden kann, sollten (selbstverständlich) keine sensiblen Informationen über ihn übertragen werden.
Sobald ein Server ein Identifizierungstoken ausgegeben und übermittelt hat, das der OIDC-Spezifikation entspricht, wird dies für den Server nicht der Fall seinAutorisierungsservermehr als eineIdentitätsanbieter.
Endpunkt für Benutzerinformationen
Da ein Token nur eine bestimmte Menge an Daten enthalten kann bzw. darf, kann über die sogenannten erweiterten Daten eines Benutzerprofils zugegriffen werdenUserInfo-EndpunktFür diese Abfrage verwenden Clients das Zugriffstoken des Benutzers. Der Identitätsanbieter kann dann mithilfe des Zugriffstokens den relevanten Benutzer identifizieren und Profildaten zurückgeben.
.bekannter Endpunkt
Um zu vermeiden, dass OIDC-Clients umfassend konfiguriert werden müssen, stellt die OIDC-Spezifikation einen definierten Endpunkt bereit, über den Clients die vollständige erforderliche Konfiguration abrufen können. die Strecke hinunter/.γνωστό/openid-configuration
, das an die Basis-URL des Identitätsanbieters angehängt wird, enthält alle vom Identitätsanbieter bereitgestellten URLs und Einstellungen, die für die OIDC-konforme Kommunikation erforderlich sind. So sind neben der URL auch die URLs zur Authentifizierung zu finden. Zur Verifizierung der Tokens wird hier auch der benötigte öffentliche Schlüssel bereitgestellt.
Schlüsselanhänger
Ich werde es bald selbst machen...Die berühmten letzten Worte eines Softwareentwicklers, der die eigentlich gar nicht so komplizierte Spezifikation selbst umsetzen wollte, aufgrund der Detailtiefe aber nie bei Projekt- und Teambesprechungen auftauchte. Mittlerweile ist das Team gestartetSchlüsselanhänger.
Und so hat es das Team gut gemacht. Auch wenn die Spezifikationen auf den ersten Blick nicht kompliziert erscheinen, stellt die Implementierung eines OpenID-konformen Identitätsanbieters mit allen einzelnen Spezifikationen einen erheblichen Aufwand mit einer nicht zu unterschätzenden Komplexität dar. Kehren Sie also zu Produkten und Projekten wie Keycloak zurück und nutzen Sie die Funktionen, die Keycloak bereits bietet, ohne eine einzige Codezeile schreiben zu müssen.
Die Verwendung und Integration von Clientanwendungen ist sehr einfach, da Keycloak ein OIDC-zertifizierter Identitätsanbieter ist, auf den mit jeder OIDC-Bibliothek und jedem OIDC-Adapter zugegriffen werden kann. Und sie sind mittlerweile für fast jede verfügbare Umgebung, Programmiersprache und Plattform verfügbar.
Eine einmalige Anmeldung ist dann zwischen allen Clients im gleichen Keycloak-Gültigkeitsbereich möglich – einsKönigreich- sind geformt. Die Bedeutung von aRegierenEr kennt die Spezifikationen nicht, ein Reich ist etwas Spezifisches für Keycloak. Im Sinne der Spezifikation stellt eine Domain einen unabhängigen Identitätsanbieter dar. Keycloak kann daher mehrere unabhängige Identitätsanbieter auf einem Server anbieten, jedoch alle über eine zentrale und dedizierte Domain – demHerrDas Königreich kann verwalten und verwalten. Das primäre Feld ist nicht für den operativen Einsatz durch Kunden und Benutzer gedacht, sondern dient ausschließlich administrativen Zwecken.
Sehen wir uns weitere Funktionen an, die Keycloak neben der „regulären Anmeldung“ bietet:
Ich habe mein Passwort vergessen und es zurückgesetzt
Keycloak bietet Funktionen, mit denen ein Benutzer selbstständig einen vergessenen Passwort- oder Passwort-Reset-Vorgang einleiten kann. Anschließend schickt Keycloak dem Nutzer eine E-Mail mit einem Link (mit begrenzter Gültigkeit), über den er ein neues Passwort vergeben kann. Keycloak generiert niemals ein Passwort und sendet es als temporäres Passwort!
Passwortrichtlinien
Die Komplexität bzw. Anforderungen an Passwörter können über viele verschiedene Regeln definiert werden. Es können einerseits die üblichen Regeln definiert werden, wie Länge, Groß- und Kleinbuchstaben, Zahlen, Sonderzeichen etc., aber auch erweiterte Regeln, wie Ablaufzeit, letzteres nichtNPasswörter, Hashing-Algorithmus und Wiederholungen usw.
OTP wie 2. Faktor
Glücklicherweise führt heute kaum noch ein Weg an der Zwei-Faktor-Authentifizierung vorbei. Keycloak bietet hierfür standardmäßig ein OTP-Verfahren an, das entweder zeitbasiert (TOTP) oder rückwärtsbasiert (HOTP) funktioniert und mit Apps wie Google Authenticator, Microsoft Authenticator, Authy usw. funktioniert. konfigurierbar und nutzbar.
Account Bestätigung
Auf Wunsch muss der Nutzer zunächst sein Konto über seine E-Mail-Adresse verifizieren, um seine Identität erfolgreich verifizieren zu können. Der Benutzer muss Zugriff haben, damit sein Konto als verifiziert gilt.
Konto-Selbstbedienung
Keycloak bietet ein eigenes Konto für die grundlegende Kontoverwaltung anZählkonsoleüber die ein Nutzer nach der Anmeldung seine eigenen Daten, wie Vor- und Nachname sowie E-Mail-Adresse, ändern kann. Über die Kontokonsole kann auch die Neuzuweisung von Passwörtern initiiert und OTP als zweiter Faktor konfiguriert werden. In einer weiteren Ansicht sieht der Nutzer, mit welchen Endgeräten Keycloak-Sitzungen durchgeführt werden und für welche Kunden-Tags er diesen Nutzer vergeben hat.
Identitätsvermittlung und soziale Anmeldungen
Wenn Sie mit externen Identitätsanbietern oder sozialen Links zusammenarbeiten möchten und den von diesen Parteien bereitgestellten Identitäten vertrauen, kann eine Vermittlung mit ihnen problemlos eingerichtet werden. Die Verifizierung/Authentifizierung wird dann vom externen IdP durchgeführt und Keycloak vertraut diesen Parteien. Alle möglichen Plattformen wie Google, Twitter, GitHub, Facebook, LinkedIn, Microsoft usw. sind als Social-Network-Logins verfügbar. Wenn Sie einen externen IdP über SAML oder OIDC (z. B. Azure Active Directory) integrieren möchten, können Sie generische Adapter dafür konfigurieren.
Benutzerverband
Wenn im Unternehmen (oder in der Anwendungsumgebung) bereits Verzeichnisse (von Benutzern) vorhanden sind, beispielsweise ein LDAP-Server oder ein Kerberos-Server, können diese als rein konfigurierbare Datenquelle zur Benutzerauthentifizierung in Keycloak integriert werden. Dabei arbeitet Keycloak transparent mit Daten unabhängig von deren Herkunft. Passwörter werden immer mit dem externen Verzeichnis verglichen, Keycloak speichert hier keine Daten!
Verfügt ein Verzeichnis über keine LDAP-Schnittstelle, kann über eine Erweiterung eine entsprechende Anbindung implementiert und programmgesteuert zur Verfügung gestellt werden. Siehe auch den folgenden Artikel in dieser Ausgabe.
Gruppierung
Über ein Authentifizierungssystem wird nachgedachtder Punkt des Versagens.Wenn keine Authentifizierung verfügbar ist, kann kein Benutzer mit irgendeinem System arbeiten. Auch sind die Systeme nicht mehr interoperabel, da Responsible Design auch eine Authentifizierung in der Inter-Service-Kommunikation vorsieht. Aus diesem Grund muss das Authentifizierungssystem möglichst hochverfügbar und damit ausfallsicher sein.
Keycloak verfügt über eine integrierteInfinispan-Server, der als verteilter Cache dafür verantwortlich ist, die am Cluster beteiligten Keycloak-Knoten mit ihren jeweiligen Arbeitsdaten – hauptsächlich Benutzersitzungen – zu versorgen. Der anfängliche Einrichtungsaufwand ist überschaubar und ein einfacher Cluster kann in wenigen Minuten eingerichtet und einsatzbereit sein. Zur Anpassung stehen alle von Infinispan bereitgestellten Optionen zur Verfügung. Ein externer Infinispan-Cluster kann auch losgelöst von Keycloak verwendet werden.
Anpassungen und Erweiterungen
Die oben genannten Funktionen stellen möglicherweise nur eine Auswahl aus dem gesamten Angebot von Keycloak dar. Die Funktionsimplementierung von Keycloak basiert aufJava Service Provider Interface (SPI)Standardmäßig und umfassend an die eigenen Bedürfnisse und Anforderungen anpassbar und um neue Funktionen erweiterbar. Benutzerdefinierte Designs und damit das Anpassen des Erscheinungsbilds von Anmeldeseiten sind nur die einfachste und minimalste Funktion. Welche erweiterten Funktionen zusätzlich verfügbar sind, zeigt der folgende Artikel„Passen Sie Keycloak an Ihre Bedürfnisse an“in dieser Broschüre.
Hosting und Datensouveränität
Natürlich ist Keycloak nicht der einzige Authentifizierungsanbieter auf dem Markt. Neben Keycloak gibt es auchAutor0eOktasind sicherlich die beiden bekanntesten Plattformen, die Authentifizierung als Service anbieten. Aber hier ist einer der großen, entscheidenden Unterschiede: Keycloak ist eines der wenigen Systeme, bei denen es sich nicht um einen verwalteten Dienst handelt, den Sie kaufen. Keycloak ist eines der wenigen Systeme, das eigenständig funktionieren kann – oder sollte, je nach Ihrer Sichtweise. Der eigene Betrieb und das eigene Hosting bietet jedoch den unschlagbaren Vorteil, dass die Daten und der Zugriff darauf in eigener Hoheit und Verantwortung bleiben. Wer möchte schon die schützenswertesten Daten – Benutzerdaten inklusive Passwörter – einem Drittanbieter überlassen? Und dann potenziell Drittlandunternehmen, die im Sinne der DSGVO als äußerst problematisch gelten können.
Machen Sie sich also lieber die Mühe und bedienen Sie das System selbst. Ja, es handelt sich um ein zusätzliches System, das gewartet werden muss, einschließlich Updates, Fehlerbehebungen, Betrieb, Überwachung und allem, was dazu gehört. Und ein vertrauenswürdiger, hochverfügbarer Identitätsanbieter. Sein Betrieb ist zweifellos eine Herausforderung. Aber die Sicherheit der Nutzerdaten und damit der Ruf des Betreibers – unseres eigenen Unternehmens – muss es uns wert sein. Ja, auch hier kann trotz der vielen Out-of-the-Box-Features noch einiges schiefgehen. Gerade bei manchen Konfigurationen gibt es ein paar Dinge zu beachten: Das System ist nicht völlig angreifbar. Aber genau das richtig zu machen, ohne zusätzlich für die korrekte Umsetzung verantwortlich zu sein, was bei einer Inhouse-Lösung der Fall wäre, macht sehr viel Sinn. Raum für eine sichere Systemumgebung mit vertrauenswürdiger Authentifizierung.
Keycloak.X – die Zukunft gehört Quarkus
Keycloak basiert auf der OIDC-Implementierung aus dem Jahr 2013, als es veröffentlicht wurde, und stellte daher eine frühe Implementierung des OIDC bereitwilder Flug- Anwendungsserver. Im Grunde war Keycloak „nur“ eine Webanwendung und erforderte den Einsatz eines Anwendungsservers. Sehr frühe Ansätze, Keycloak als plattformunabhängig.guerra
Der Vertrieb wurde schnell aufgegeben, da er mehrere Probleme mit sich brachte. Da Wildfly auch über einen HA-Modus (HighAvailability = hohe Verfügbarkeit) mit integriertem Infinispan verfügte, war der Cluster-HA-Modus recht einfach zu verwenden und konnte in Keycloak integriert werden.
Der Einsatz eines Anwendungsservers ist an sich nicht zu beanstanden, hat aber auch Nachteile. Insbesondere in laufenden Projekten mit Container-basierten Umgebungen sind Anwendungsserver schwieriger zu verwalten als für diese Umgebungen optimierte Anwendungen. Gleichzeitig arbeitet eine Serveranwendung isoliert von einer bestimmten Version der Jakarta-EE-Spezifikation und ist daher nicht immer auf dem neuesten Stand mit den im Java-Ökosystem angebotenen Funktionen (was nicht dazu gedacht ist, die EE-Spezifikation zu kritisieren). Beispiel). im Gegenteil, in manchen Bereichen ist es gut, eine Spezifikation zu haben).
ComQuarksIm Jahr 2019 veröffentlichte Red Hat ein Anwendungsframework, das die Entwicklung von Anwendungen und Diensten unterstützt, die für Container-basierte Umgebungen optimiert sind (Details finden Sie unter diesem Link).
Da Keycloak zunehmend auch in Containerumgebungen eingesetzt wird, konzentrierten sich die Arbeiten auf die Migration des Wildfly-Anwendungsservers auf das Quarkus-Anwendungsframework ab 2020. Diese Migration ist nur ein, aber der notwendige Ausgangspunkt für viele zukünftige Upgrades von Keycloak. Unabhängig von einer bestimmten Version: Als Appserver können Sie neue Java-Funktionen flexibler nutzen und so Ihre Anwendung besser für die Zukunft optimieren. Schnellere Startzeiten und geringerer Speicherverbrauch sind nur zwei der vielen weiteren Vorteile. Die Möglichkeit, die Vorteile einer Containerumgebung zu nutzen, bedeutet jedoch nicht gleichzeitig, dass Keycloak nur über Container arbeiten kann.
Mit Keycloak in der Version 17 im Februar 2022 handelt es sich um die erste Keycloak-Distribution auf Basis von Quarkuser erschien.Bis zu diesem Datum gab es immer VorschauenSchlüsselanhänger.HEigentlich wird der Name nur intern verwendet. Keycloak heißt immer noch Keycloak, steht aber für Quarkus-Distribution. Wer noch die Wildfly-Distribution ab Version 17 nutzt, nutztLegacy-Schlüsselumhang.Die auf Wildfly basierende Keycloak-Distribution sollte nurwird bis September 2022 unterstütztFür Unternehmen, die sich weiterhin mit dem Vertrieb von Wildfliegen befassen, besteht daher großer Handlungsbedarf.
Funktional hat sich in Keycloak durch den Wechsel zu Quarkus nichts geändert, in der Entwicklung und Konfiguration hat sich jedoch alles komplett geändert. Keine Sorge, es ist nicht alles komplizierter geworden. Aber alles ist anders, es braucht Zeit und das Neue (Migration)FührerWenn Sie etwas bearbeiten, werden Sie schnell erkennen, dass die Überprüfung der Konfiguration Vorteile hat. Frühe Migrationserfahrungen haben gezeigt, dass dies durchaus ein gangbarer Schritt ist. Es hing davon ab, wie Keycloak mit der Legacy-Version (klassische Bereitstellung auf dem Dateisystem mit selbst erstellten Skripten oder als Docker-Container, der bereits fertige Skripte enthielt) arbeitete, um die jeweiligen Konfigurationen vorzunehmen, egal in welcher Umgebung man sich befindet – Keycloak wird immer auf die gleiche Weise konfiguriert. Ebenso. Der Benutzer hat hierfür drei Möglichkeiten: eine.conf
Datei, in die Parameter importiert werden, wobei Parameter als Befehlszeilenargumente beim Start von Keycloak oder als Umgebungsvariablen angegeben werden. Optionen können auch in Kombination miteinander verwendet werden.
Eines der aufregendsten zukünftigen Features wird sein, dass Keycloak endlich eine Möglichkeit haben wirdUpdates ohne AusfallzeitHolen Sie es sich. Bisher musste der gesamte Keycloak-Cluster für ein Hauptversions-Upgrade vor der Migration immer heruntergefahren und gestoppt werden und der Cluster mit einem einzelnen Knoten neu gestartet werden. Der Hauptgrund dafür ist die Nutzung von Potenzialenbedeutsame Änderungenbei der Migration zwischen Hauptdatenbankversionen. Diese Einschränkung soll in Zukunft durch den Einsatz des neuen vermieden werdenKarte speichernDarüber hinaus soll der Kartenspeicher auch (Meta-)Daten bereitstellen, die flexibler kartiert und verwaltet werden können.
Abschluss
Keycloak wird bereits häufig als Identitäts- und Zugriffsverwaltungsserver und Single-Sign-On-Server verwendet und erfreut sich in den letzten Jahren zunehmender Beliebtheit. Es wird von Unternehmen jeder Größe genutzt, vom kleinen Startup bis zum internationalen Konzern. Es bietet den großen Vorteil, vieleaus der BoxNutzen Sie Funktionalitäten, die sofort genutzt werden, können Sie aber gleichzeitig die Prozesse an Ihre eigenen Bedürfnisse anpassen und erweitern. Und das alles mit absoluter Hoheit über die gespeicherten Daten, da Keycloak nicht auf dem Modell eines Managed Services basiert und Ihre Daten stattdessen manuell erfasst, sondern jederzeit über ein für Sie zuständiges Unternehmen darauf zugreifen kann.
Während die OAuth2- und OIDC-Spezifikationen nicht schwer zu verstehen sind und es auf den ersten Blick einfach wäre, sie selbst zu implementieren, sollten Sie sich von ihnen fernhalten und eine Anwendung verwenden, die bereits alles abdeckt und implementiert. Keycloak erledigt das für uns. Und wir sind uns darüber im Klaren, welche technischen Umsetzungen uns wichtig sind. Schließlich sind wir keine Sicherheitsexperten.
Durch die Migration auf das Quarkus-Framework hat Keycloak gerade einen wichtigen Schritt getan, um an der Spitze der Container-basierten Welt zu bleiben und in der Lage zu sein, neue Funktionen in Zukunft schnell zu implementieren und bereitzustellen. Hier wird es bestimmt noch viel mehr zu tun geben. Doch Stillstand bedeutet heute Rückschritt. Wir sind also gespannt, was Keycloak in Zukunft bereithält!
Ich binnächster ArtikelSehen wir uns an, wie Keycloak einfach und logisch an Ihre eigenen (Firmen-)Anforderungen angepasst werden kann.
Suchen Sie nach Keycloak-Tipps, Support, Workshops oder Schulungen?
« Keycloak 17 ist erschienen – Quarkus ist jetzt der Standardmodus! Passen Sie Keycloak an Ihre eigenen Bedürfnisse an und erweitern Sie es »