{"id":40865,"date":"2020-02-05T10:07:04","date_gmt":"2020-02-05T07:07:04","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961"},"modified":"2020-02-05T10:07:04","modified_gmt":"2020-02-05T07:07:04","slug":"sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961","title":{"rendered":"SSO auf mikroservicebasierter Architektur. Wir verwenden Keycloak. Teil Nr. 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>In jedem gro\u00dfen Unternehmen, so auch bei der X5 Retail Group, steigt mit der Entwicklung die Anzahl der Projekte, die eine Benutzeranmeldung erfordern. Im Laufe der Zeit ist ein nahtloser \u00dcbergang der Benutzer von einer Anwendung zur anderen erforderlich, was die Notwendigkeit eines zentralen Single-Sign-On (SSO) Servers mit sich bringt. Doch was ist zu tun, wenn bereits Identit\u00e4tsanbieter wie AD oder andere, die nicht \u00fcber zus\u00e4tzliche Attribute verf\u00fcgen, in verschiedenen Projekten eingesetzt werden? Hier kommen Identit\u00e4tsbroker ins Spiel. Die funktionalsten Vertreter dieser Klasse sind Systeme wie Keycloak, Gravitee Access Management und andere. Die Nutzungsszenarien k\u00f6nnen sehr unterschiedlich sein: maschinelles Interagieren, Benutzerbeteiligung usw. Die L\u00f6sung sollte eine flexible und skalierbare Funktionalit\u00e4t unterst\u00fctzen, die in der Lage ist, alle Anforderungen in einem System zu vereinen, und in unserem Unternehmen ist derzeit dieser Identit\u00e4tsbroker \u2013 Keycloak. <\/p>\n<p><img decoding=\"async\" alt=\"SSO auf mikroservicebasierter Architektur. Wir verwenden Keycloak. Teil Nr. 1\" src=\"\/wp-content\/uploads\/2020\/02\/3a7f1d5f68fa5d07fc30f2804dc62bef.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKeycloak ist ein Open-Source-Produkt, das f\u00fcr die Identit\u00e4ts- und Zugriffsverwaltung entwickelt wurde und von RedHat unterst\u00fctzt wird. Es bildet die Grundlage f\u00fcr Produkte des Unternehmens, die SSO \u2013 RH-SSO \u2013 verwenden.<\/p>\n<h3>Wichtige Konzepte <\/h3>\n<p>\nBevor Sie sich mit den L\u00f6sungen und Ans\u00e4tzen auseinandersetzen, sollten Sie die Begriffe und den Ablauf der Prozesse kl\u00e4ren:<\/p>\n<p><img decoding=\"async\" alt=\"SSO auf mikroservicebasierter Architektur. Wir verwenden Keycloak. Teil Nr. 1\" src=\"\/wp-content\/uploads\/2020\/02\/3a83d4364425aeed1019662fd1d5f152.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Identifikation<\/b> \u2013 dies ist das Verfahren zur Identifikation einer Person anhand ihrer Kennung (einfacher gesagt, es handelt sich um die Bestimmung des Namens, Benutzernamens oder der Nummer).<\/p>\n<p><b>Authentifizierung<\/b> \u2013 dies ist der Vorgang zur \u00dcberpr\u00fcfung der Echtheit (ein Benutzer wird durch ein Passwort \u00fcberpr\u00fcft, eine E-Mail wird durch eine elektronische Signatur validiert usw.)<\/p>\n<p><b>Autorisierung<\/b> \u2013 dies ist die Gew\u00e4hrung des Zugriffs auf eine Ressource (z. B. auf eine E-Mail).<\/p>\n<h4>Identit\u00e4tsbroker Keycloak<\/h4>\n<p>\n<b>Keycloak<\/b> ist eine L\u00f6sung zur Verwaltung von Identit\u00e4t und Zugriff, die als Open Source entwickelt wurde und f\u00fcr Systeme geeignet ist, die Muster der Microservices-Architektur verwenden.<\/p>\n<p>Keycloak bietet Funktionen wie Single Sign-On (SSO), Identit\u00e4tsvermittlung und sozialen Login, Benutzermanagement, Client-Adapter, die Administrationskonsole und die Kontoverwaltungskonsole.<\/p>\n<p>Die grundlegenden Funktionen, die von Keycloak unterst\u00fctzt werden, sind:<\/p>\n<ul>\n<li>Single Sign-On und Single Sign-Out f\u00fcr Webanwendungen.<\/li>\n<li>Unterst\u00fctzung f\u00fcr OpenID\/OAuth 2.0\/SAML.<\/li>\n<li>Identit\u00e4tsvermittlung \u2013 Authentifizierung \u00fcber externe OpenID Connect oder SAML Identit\u00e4tsanbieter.<\/li>\n<li>Soziale Login \u2013 Unterst\u00fctzung von Google, GitHub, Facebook, Twitter zur Benutzeridentifizierung.<\/li>\n<li>Benutzermanagement \u2013 Synchronisierung von Benutzern aus LDAP- und Active Directory-Servern sowie anderen Identit\u00e4tsanbietern.<\/li>\n<li>Kerberos-Br\u00fccke \u2013 Verwendung eines Kerberos-Servers zur automatischen Authentifizierung von Benutzern.<\/li>\n<li>Administrationskonsole \u2013 f\u00fcr die zentrale Verwaltung von Einstellungen und Konfigurationen \u00fcber das Web.<\/li>\n<li>Kontoverwaltungs-Konsole \u2013 f\u00fcr die selbstst\u00e4ndige Verwaltung von Benutzerprofilen.<\/li>\n<li>Anpassung der L\u00f6sung basierend auf dem Firmen-CI.<\/li>\n<li>2FA-Authentifizierung \u2013 Unterst\u00fctzung f\u00fcr TOTP\/HOTP mit Google Authenticator oder FreeOTP.<\/li>\n<li>Login-Flows \u2013 Selbstregistrierung von Benutzern, Wiederherstellung und Zur\u00fccksetzung von Passw\u00f6rtern und mehr.<\/li>\n<li>Session Management \u2013 Administratoren k\u00f6nnen Benutzer-Sessions zentral verwalten.<\/li>\n<li>Token Mappers \u2013 Zuordnung von Benutzerattributen, Rollen und anderen erforderlichen Attributen in Tokens.<\/li>\n<li>Flexible Verwaltung von Richtlinien \u00fcber Realm, Anwendungen und Benutzer.<\/li>\n<li>CORS-Unterst\u00fctzung \u2013 Clientadapter verf\u00fcgen \u00fcber integrierte CORS-Unterst\u00fctzung.<\/li>\n<li>Service Provider Interfaces (SPI) \u2013 Eine Vielzahl von SPI, die es erm\u00f6glichen, verschiedene Aspekte des Serverbetriebs zu konfigurieren: Authentifizierungsfl\u00fcsse, Identit\u00e4tsanbieter, Protokollzuordnungen und vieles mehr.<\/li>\n<li>Clientadapter f\u00fcr JavaScript-Anwendungen, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.<\/li>\n<li>Unterst\u00fctzung f\u00fcr die Interaktion mit verschiedenen Anwendungen, die die OpenID Connect Relying Party Library oder die SAML 2.0 Service Provider Library unterst\u00fctzen.<\/li>\n<li>Erweiterbarkeit durch Nutzung von Plugins.<\/li>\n<\/ul>\n<p>\nF\u00fcr CI\/CD-Prozesse sowie die Automatisierung von Verwaltungsprozessen in Keycloak kann das REST API\/JAVA API verwendet werden. Die Dokumentation ist elektronisch verf\u00fcgbar: <\/p>\n<p>REST API <noindex><a rel=\"nofollow\" href=\"https:\/\/www.keycloak.org\/docs-api\/8.0\/rest-api\/index.html\">https:\/\/www.keycloak.org\/docs-api\/8.0\/rest-api\/index.html<\/a><\/noindex><br \/>\nJAVA API <noindex><a rel=\"nofollow\" href=\"https:\/\/www.keycloak.org\/docs-api\/8.0\/javadocs\/index.html\">https:\/\/www.keycloak.org\/docs-api\/8.0\/javadocs\/index.html<\/a><\/noindex><\/p>\n<h4>Enterprise-Identit\u00e4tsanbieter (On-Premise)<\/h4>\n<p>\nM\u00f6glichkeit zur Authentifizierung von Benutzern \u00fcber User Federation-Dienste.<\/p>\n<p><img decoding=\"async\" alt=\"SSO auf mikroservicebasierter Architektur. Wir verwenden Keycloak. Teil Nr. 1\" src=\"\/wp-content\/uploads\/2020\/02\/59bbeaf4630855467ddb003d52b0c1b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs kann auch eine durchgehende Authentifizierung verwendet werden \u2014 wenn Benutzer sich an Arbeitspl\u00e4tzen mit Kerberos (LDAP oder AD) authentifizieren, k\u00f6nnen sie sich automatisch bei Keycloak anmelden, ohne ihr Benutzername und Passwort erneut eingeben zu m\u00fcssen. <\/p>\n<p>F\u00fcr die Authentifizierung und anschlie\u00dfende Autorisierung von Benutzern ist die Verwendung einer relationalen Datenbank von Vorteil, da sie sich besonders f\u00fcr Entwicklungsumgebungen eignet und keine umfangreichen Konfigurationen und Integrationen in den fr\u00fchen Projektphasen erfordert. Standardm\u00e4\u00dfig verwendet Keycloak eine integrierte Datenbank zur Speicherung von Einstellungen und Benutzerdaten.<\/p>\n<p>Die Liste der unterst\u00fctzten Datenbanken ist umfangreich und umfasst: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle und weitere. Die am besten getesteten sind derzeit Oracle 12C Release1 RAC und der Galera 3.12-Cluster f\u00fcr MariaDB 10.1.19. <\/p>\n<h4>Identit\u00e4tsanbieter \u2014 Social Login <\/h4>\n<p>\nDie Nutzung von Logging \u00fcber soziale Netzwerke ist m\u00f6glich. Zur Aktivierung dieser Funktion wird das Admin-Panel von Keycloak verwendet. Es sind keine \u00c4nderungen am Anwendungscode erforderlich; diese Funktionalit\u00e4t ist \"out of the box\" verf\u00fcgbar und kann in jeder Phase des Projekts aktiviert werden.<\/p>\n<p><img decoding=\"async\" alt=\"SSO auf mikroservicebasierter Architektur. Wir verwenden Keycloak. Teil Nr. 1\" src=\"\/wp-content\/uploads\/2020\/02\/546ddea10c79662ca37a448d3dfc1fd0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00fcr die Benutzerautorisierung k\u00f6nnen OpenID\/SAML Identity Provider verwendet werden.<\/p>\n<h3>Typische Autorisierungsszenarien mit OAuth2 in Keycloak<\/h3>\n<p>\n<b>Authorization Code Flow <\/b> \u2014 wird bei serverseitigen Anwendungen verwendet. Dies ist einer der am weitesten verbreiteten Autorisierungsans\u00e4tze, da er gut f\u00fcr serverseitige Anwendungen geeignet ist, bei denen der Anwendungscode und die Kundendaten f\u00fcr Dritte nicht zug\u00e4nglich sind. Der Prozess basiert in diesem Fall auf einer Weiterleitung (Redirection). Die Anwendung muss in der Lage sein, mit einem Benutzeragenten, wie einem Webbrowser, zu interagieren, um Autorisierungscodes \u00fcber den Benutzeragenten zu empfangen.<\/p>\n<p><b>Implicit Flow<\/b> \u2014 wird von mobilen oder Webanwendungen verwendet (Anwendungen, die auf den Ger\u00e4ten der Benutzer laufen).<\/p>\n<p>Der implizite Autorisierungsflow wird von mobilen und Webanwendungen verwendet, bei denen die Vertraulichkeit des Nutzers nicht garantiert werden kann. Dieser Flow nutzt ebenfalls eine Umleitung des User Agents, wobei das Zugriffstoken an den User Agent \u00fcbermittelt wird, um es sp\u00e4ter in der Anwendung zu verwenden. Dadurch wird das Token f\u00fcr den Nutzer und andere Anwendungen auf dessen Ger\u00e4t verf\u00fcgbar. Bei diesem Typ der Autorisierung findet keine Authentifizierung der Anwendung statt, und der gesamte Prozess beruht auf der Umleitungs-URL, die zuvor im Dienst registriert wurde.<\/p>\n<p>Der implizite Flow unterst\u00fctzt keine Zugriffstoken-Refresh-Tokens.<br \/>\n<br \/>\n<b>Client-Credentials-Grant-Flow<\/b> \u2014 werden verwendet, wenn Anwendungen auf eine API zugreifen. Diese Art der Autorisierungsberechtigung wird in der Regel f\u00fcr \"Server-zu-Server\"-Interaktionen eingesetzt, die im Hintergrund ohne sofortige Benutzerinteraktion durchgef\u00fchrt werden m\u00fcssen. Der Fluss der Client-Anmeldeinformationen erm\u00f6glicht es einem Webdienst (vertraulichen Client), seine eigenen Anmeldeinformationen anstelle der Benutzeridentit\u00e4t zur Authentifizierung beim Aufruf eines anderen Webdienstes zu verwenden. Um ein h\u00f6heres Sicherheitsniveau zu gew\u00e4hrleisten, kann der aufrufende Dienst ein Zertifikat (anstelle eines gemeinsamen Geheimnisses) als Anmeldeinformationen verwenden.<\/p>\n<p>Die OAuth2-Spezifikation ist beschrieben in <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc6749\">RFC-6749<\/a><\/noindex> <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc8259\">RFC-8252<\/a><\/noindex> <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc6819\">RFC-6819<\/a><\/noindex><\/p>\n<h3>JWT-Token und seine Vorteile<\/h3>\n<p>\nJWT (JSON Web Token) ist ein offener Standard (<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc7519\">https:\/\/tools.ietf.org\/html\/rfc7519<\/a><\/noindex>), der einen kompakten und autonomen Weg zur sicheren \u00dcbertragung von Informationen zwischen Parteien in Form eines JSON-Objekts definiert.<\/p>\n<p>Laut den Standards besteht ein Token aus drei Teilen im Base-64-Format, die durch Punkte getrennt sind. Der erste Teil wird als Header bezeichnet und enth\u00e4lt den Typ des Tokens sowie den Namen des Hash-Algorithmus zur Erzeugung der digitalen Signatur. Der zweite Teil speichert die grundlegenden Informationen (Benutzer, Attribute usw.). Der dritte Teil ist die digitale Signatur.<\/p>\n<p>..<br \/>\nSpeichern Sie ein Token niemals in Ihrer Datenbank. Denn ein g\u00fcltiges Token ist gleichbedeutend mit einem Passwort; ein Token zu speichern ist dasselbe, wie ein Passwort im Klartext zu speichern.<br \/>\n<b>Access-Token <\/b>ist ein Token, das seinem Inhaber Zugriff auf gesch\u00fctzte Ressourcen des Servers gew\u00e4hrt. In der Regel hat es eine kurze Lebensdauer und kann zus\u00e4tzliche Informationen enthalten, wie die IP-Adresse der anfordernden Partei.<\/p>\n<p><b>Refresh-Token <\/b>ist ein Token, das es Clients erm\u00f6glicht, neue Access-Token nach Ablauf ihrer Lebensdauer anzufordern. Diese Tokens werden in der Regel f\u00fcr einen l\u00e4ngeren Zeitraum ausgestellt.<\/p>\n<p>Die Hauptvorteile der Verwendung in einer Mikroservice-Architektur:<\/p>\n<ul>\n<li>Die M\u00f6glichkeit, auf verschiedene Anwendungen und Dienstleistungen durch einmalige Authentifizierung zuzugreifen.<\/li>\n<li>Fehlen bestimmte erforderliche Attribute im Benutzerprofil, k\u00f6nnen Daten hinzugef\u00fcgt werden, die automatisch und \u201eon-the-fly\u201c in die Payload integriert werden k\u00f6nnen.<\/li>\n<li>Es besteht keine Notwendigkeit, Informationen \u00fcber aktive Sitzungen zu speichern; die serielle Anwendung muss nur die Signatur \u00fcberpr\u00fcfen.<\/li>\n<li>Flexibleres Zugriffsmanagement durch zus\u00e4tzliche Attribute in der Payload.<\/li>\n<li>Die Verwendung der Token-Signatur f\u00fcr den Header und die Payload erh\u00f6ht die Sicherheit der gesamten L\u00f6sung.<\/li>\n<\/ul>\n<p><\/p>\n<h3>JWT-Token \u2013 Komponenten<\/h3>\n<p>\n<b>Header<\/b> \u2013 standardm\u00e4\u00dfig enth\u00e4lt der Header nur den Token-Typ und den Algorithmus, der zur Verschl\u00fcsselung verwendet wird.<\/p>\n<p>Der Token-Typ wird im Schl\u00fcssel \u201etyp\u201c gespeichert. Der Schl\u00fcssel \u201etyp\u201c wird in JWT ignoriert. Wenn der Schl\u00fcssel \u201etyp\u201c vorhanden ist, muss sein Wert JWT sein, um anzugeben, dass dieses Objekt ein JSON Web Token ist.<\/p>\n<p>Der zweite Schl\u00fcssel \u201ealg\u201c definiert den Algorithmus, der zur Verschl\u00fcsselung des Tokens verwendet wird. Standardm\u00e4\u00dfig sollte er auf HS256 gesetzt sein. Der Header wird in base64 kodiert.<\/p>\n<p>{ \"alg\": \"HS256\", \"typ\": \"JWT\"}<br \/>\n<b>Payload (Inhalt)<\/b> \u2014 im Payload werden alle Informationen gespeichert, die \u00fcberpr\u00fcft werden m\u00fcssen. Jeder Schl\u00fcssel im Payload wird als \u201eAnspruch\u201c bezeichnet. Zum Beispiel kann man sich nur auf Einladung (geschlossene Promotion) in die Anwendung einloggen. Wenn wir jemanden einladen m\u00f6chten, senden wir ihm eine Einladung per E-Mail. Es ist wichtig, dass die E-Mail-Adresse der Person geh\u00f6rt, die die Einladung annimmt, deshalb werden wir diese Adresse im Payload einschlie\u00dfen und im Schl\u00fcssel \u201ee-mail\u201c speichern.<\/p>\n<p>{ \"email\": \"example@x5.ru\" }<br \/>\n<br \/>\nDie Schl\u00fcssel im Payload k\u00f6nnen beliebig sein. Es gibt jedoch einige reservierte Schl\u00fcssel:<\/p>\n<ul>\n<li>iss (Issuer) \u2014 bestimmt die Anwendung, aus der das Token gesendet wird.<\/li>\n<li>sub (Subject) \u2014 bestimmt das Thema des Tokens.<\/li>\n<li>aud (Audience) \u2013 ein Array von schreibsensitiven Zeichenfolgen oder URIs, das die Liste der Empf\u00e4nger dieses Tokens darstellt. Wenn die empfangende Partei ein JWT mit diesem Schl\u00fcssel erh\u00e4lt, muss sie \u00fcberpr\u00fcfen, ob sie in den Empf\u00e4ngern enthalten ist \u2013 andernfalls ignoriert sie das Token.<\/li>\n<li>exp (Ablaufzeit) \u2014 gibt an, wann das Token abl\u00e4uft. Der JWT-Standard verlangt, dass alle Implementierungen Tokens mit abgelaufener G\u00fcltigkeit ablehnen. Der Exp-Schl\u00fcssel sollte ein Zeitstempel im Unix-Format sein.<\/li>\n<li>nbf (Nicht vor) \u2014 dies ist die Zeit im Unix-Format, die den Moment angibt, ab dem das Token g\u00fcltig wird.<\/li>\n<li>iat (Ausgestellt am) \u2014 dieser Schl\u00fcssel stellt die Zeit dar, zu der das Token ausgestellt wurde und kann zur Bestimmung des Alters des JWT verwendet werden. Der iat-Schl\u00fcssel sollte ein Zeitstempel im Unix-Format sein.<\/li>\n<li>Jti (JWT-ID) \u2014 eine Zeichenfolge, die eine eindeutige Kennung f\u00fcr dieses Token unter Ber\u00fccksichtigung der Gro\u00df- und Kleinschreibung definiert.<\/li>\n<\/ul>\n<p>\nEs ist wichtig zu verstehen, dass die Nutzlast nicht in verschl\u00fcsselter Form \u00fcbertragen wird (obwohl Tokens verschachtelt sein k\u00f6nnen, wodurch die \u00dcbertragung verschl\u00fcsselter Daten m\u00f6glich ist). Daher d\u00fcrfen keine vertraulichen Informationen darin gespeichert werden. Wie der Header wird die Nutzlast in base64 codiert.<br \/>\n<b>Signatur<\/b> \u2014 sobald wir Header und Nutzlast haben, k\u00f6nnen wir die Signatur berechnen.<\/p>\n<p>Die in base64 kodierten Teile sind der Header und der Payload, die durch einen Punkt zu einer Zeichenkette verbunden werden. Anschlie\u00dfend wird diese Zeichenkette zusammen mit dem geheimen Schl\u00fcssel in den Verschl\u00fcsselungsalgorithmus eingegeben, der im Header angegeben ist (Schl\u00fcssel \u201ealg\u201c). Der Schl\u00fcssel kann jede beliebige Zeichenkette sein. L\u00e4ngere Zeichenketten sind bevorzugt, da sie mehr Zeit f\u00fcr die Entschl\u00fcsselung erfordern.<\/p>\n<p>{ \"alg\": \"RSA1_5\", \"payload\": \"A128CBC-HS256\"}<\/p>\n<h3>Aufbau einer ausfallsicheren Keycloak-Cluster-Architektur<\/h3>\n<p>\nBei der Nutzung eines einzigen Clusters f\u00fcr alle Projekte ergeben sich h\u00f6here Anforderungen an die SSO-L\u00f6sung. Wenn die Anzahl der Projekte gering ist, sind diese Anforderungen f\u00fcr alle Projekte nicht so sp\u00fcrbar, jedoch steigen sie mit zunehmender Nutzerzahl und Integrationen, wodurch die Anforderungen an Verf\u00fcgbarkeit und Leistung wachsen. <\/p>\n<p>Die Erh\u00f6hung der Ausfallrisiken eines zentralen SSO erh\u00f6ht die Anforderungen an die Architektur der L\u00f6sung und die verwendeten Methoden zur Redundanz der Komponenten und f\u00fchrt zu einem sehr strengen SLA. Daher verf\u00fcgen Projekte in der Regel w\u00e4hrend der Entwicklungsphase oder in den fr\u00fchen Phasen der Implementierung \u00fcber eine eigene nicht fehlertolerante Infrastruktur. Mit fortschreitender Entwicklung ist es notwendig, vorab Entwicklungsm\u00f6glichkeiten und Skalierung einzuplanen. Es ist am flexibelsten, einen fehlertoleranten Cluster unter Verwendung von Container-Virtualisierung oder einem hybriden Ansatz aufzubauen. <\/p>\n<p>F\u00fcr den Betrieb von Active\/Active- und Active\/Passive-Clustern ist es erforderlich, die Konsistenz der Daten in der relationalen Datenbank sicherzustellen \u2013 beide Datenbankknoten m\u00fcssen synchron zwischen verschiedenen geo-verteilten Rechenzentren repliziert werden.<\/p>\n<p>Das einfachste Beispiel f\u00fcr eine fehlertolerante Installation.<\/p>\n<p><img decoding=\"async\" alt=\"SSO auf mikroservicebasierter Architektur. Wir verwenden Keycloak. Teil Nr. 1\" src=\"\/wp-content\/uploads\/2020\/02\/c0df30a07e7dda5ae892a1fca3790a45.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWelche Vorteile bietet die Verwendung eines einheitlichen Clusters:<\/p>\n<ul>\n<li>Hohe Verf\u00fcgbarkeit und Leistung.<\/li>\n<li>Unterst\u00fctzung f\u00fcr die Betriebsarten: Active\/Active, Active\/Passive.<\/li>\n<li>M\u00f6glichkeiten f\u00fcr dynamische Skalierung \u2013 bei Verwendung von Container-Virtualisierung.<\/li>\n<li>Zentralisierte Verwaltung und \u00dcberwachung.<\/li>\n<li>Ein einheitlicher Ansatz zur Identifikation\/Authentifizierung\/Autorisierung von Nutzern in Projekten.<\/li>\n<li>Transparente Interaktion zwischen verschiedenen Projekten ohne Nutzerbeteiligung.<\/li>\n<li>M\u00f6glichkeit zur Wiederverwendung des JWT-Tokens in verschiedenen Projekten.<\/li>\n<li>Einheitlicher Vertrauenspunkt.<\/li>\n<li>Schnellerer Projektstart mit Mikrodiensten\/Container-Virtualisierung (es sind keine zus\u00e4tzlichen Komponenten erforderlich).<\/li>\n<li>Kommerzielle Unterst\u00fctzung durch den Anbieter ist verf\u00fcgbar. <\/li>\n<\/ul>\n<p><\/p>\n<h3>Worauf Sie bei der Planung eines Clusters achten sollten<\/h3>\n<p><\/p>\n<h4>Datenbankmanagementsystem<\/h4>\n<p>\nKeycloak verwendet ein Datenbankmanagementsystem zur Speicherung von: realms, clients, users usw.<br \/>\nEine Vielzahl von Datenbankmanagementsystemen wird unterst\u00fctzt: MS SQL, Oracle, MySQL, PostgreSQL. Keycloak wird mit einer eigenen eingebauten relationalen Datenbank geliefert. Die Nutzung wird f\u00fcr wenig belastete Umgebungen empfohlen \u2013 wie etwa Entwicklungsumgebungen.<\/p>\n<p>F\u00fcr den Betrieb in einem Active\/Active- und Active\/Passive-Cluster muss die Datenkonsistenz in der relationalen Datenbank gew\u00e4hrleistet sein, und beide Knoten des Datenbankclusters werden synchron zwischen den Rechenzentren repliziert.<\/p>\n<h4>Verteiltes Cache (Infinispan)<\/h4>\n<p>\nF\u00fcr das ordnungsgem\u00e4\u00dfe Funktionieren des Clusters ist eine zus\u00e4tzliche Synchronisation der folgenden Cache-Typen unter Verwendung von JBoss Data Grid erforderlich:<\/p>\n<p>Authentifizierungssitzungen \u2013 werden verwendet, um Daten w\u00e4hrend der Authentifizierung eines bestimmten Benutzers zu speichern. Anfragen aus diesem Cache beinhalten in der Regel nur den Browser und den Keycloak-Server, nicht jedoch die Anwendung.<\/p>\n<p>Aktionstoken \u2013 werden in Szenarien verwendet, in denen der Benutzer eine Aktion asynchron best\u00e4tigen muss (z. B. per E-Mail). W\u00e4hrend des Prozesses 'Passwort vergessen' wird der Cache actionTokens in Infinispan verwendet, um Metadaten \u00fcber die bereits verwendeten Aktionsmarker zu verfolgen, damit sie nicht erneut verwendet werden k\u00f6nnen.<\/p>\n<p>Caching und Invalidierung von persistenten Daten \u2013 wird verwendet, um persistente Daten zu cachen, um unn\u00f6tige Datenbankanfragen zu vermeiden. Wenn ein Keycloak-Server Daten aktualisiert, m\u00fcssen alle anderen Keycloak-Server in allen Rechenzentren dar\u00fcber informiert werden.<\/p>\n<p>Arbeit \u2013 wird nur verwendet, um Ung\u00fcltigkeitsmeldungen zwischen den Knoten des Clusters und den Rechenzentren zu senden. <\/p>\n<p>Benutzersitzungen \u2014 werden genutzt, um Daten \u00fcber Benutzersitzungen zu speichern, die w\u00e4hrend der Browsersitzung des Benutzers g\u00fcltig sind. Der Cache muss HTTP-Anfragen von Endbenutzern und Anwendungen verarbeiten. <\/p>\n<p>Brute-Force-Schutz \u2014 wird eingesetzt, um Daten \u00fcber fehlgeschlagene Anmeldeversuche zu verfolgen. <\/p>\n<h4>Lastenausgleich<\/h4>\n<p>\nDer Lastenverteiler ist der einzige Einstiegspunkt f\u00fcr Keycloak und muss sticky sessions unterst\u00fctzen. <\/p>\n<h4>Anwendungsserver<\/h4>\n<p>\nWerden zur Kontrolle der Interaktion zwischen Komponenten verwendet und k\u00f6nnen mit vorhandenen Automatisierungs- und dynamischen Skalierungstools virtualisiert oder containerisiert werden. Die h\u00e4ufigsten Bereitstellungsszenarien sind OpenShift, Kubernetes, Rancher.<\/p>\n<p>Hier endet der erste Teil \u2013 der theoretische. In den n\u00e4chsten Artikeln werden Beispiele f\u00fcr Integrationen mit verschiedenen Identit\u00e4tsanbietern sowie Konfigurationen behandelt.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/X5RetailGroup\/blog\/486778\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 X5 Retail Group \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438 \u0442\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Single-Sing-On (SSO). \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u0430\u043a AD \u0438\u043b\u0438 \u0438\u043d\u044b\u0435, \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":40866,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-40865","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 X5 Retail Group \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438 \u0442\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Single-Sing-On (SSO). \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u0430\u043a AD \u0438\u043b\u0438 \u0438\u043d\u044b\u0435, \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47SSO \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Keycloak. \u0427\u0430\u0441\u0442\u044c \u21161 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 X5 Retail Group \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438 \u0442\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Single-Sing-On (SSO). \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u0430\u043a AD \u0438\u043b\u0438 \u0438\u043d\u044b\u0435, \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-05T07:07:04+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-05T07:07:04+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47SSO auf einer Microservices-Architektur. Wir verwenden Keycloak. Teil Nr. 1 | ProHoster","description":"In gro\u00dfen Unternehmen, und die X5 Retail Group ist da keine Ausnahme, steigt mit der Entwicklung die Anzahl der Projekte, die eine Benutzerautorisierung erfordern. Im Laufe der Zeit wird ein nahtloser \u00dcbergang der Benutzer von einer Anwendung zur anderen erforderlich, wodurch die Notwendigkeit eines zentralen Single-Sign-On (SSO) Servers entsteht. Doch wie geht man damit um, wenn solche Identit\u00e4tsanbieter wie AD oder andere, keine zus\u00e4tzlichen Funktionen bieten?","canonical_url":"https:\/\/prohoster.info\/de\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47SSO \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Keycloak. \u0427\u0430\u0441\u0442\u044c \u21161 | ProHoster","og:description":"\u0412 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 X5 Retail Group \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438 \u0442\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Single-Sing-On (SSO). \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u0430\u043a AD \u0438\u043b\u0438 \u0438\u043d\u044b\u0435, \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438","og:url":"https:\/\/prohoster.info\/de\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-05T07:07:04+00:00","article:modified_time":"2020-02-05T07:07:04+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"40865","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:46:14","updated":"2022-09-27 14:28:39"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/40865","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=40865"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/40865\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/40866"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=40865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=40865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=40865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}