Dieses Mal, am 7. Tag des Keycloak-Adventskalenders, werden wir den Sicherheitsproxy von Keycloak testen.
Security Proxy ist eine Art einfacher Reverse-Proxy-Server (im Folgenden Rivapro), der in Java implementiert ist. Der Liverpro-Server selbst ersetzt den Client-Adapter von Keycloak, sodass Sie den Inhalt des Proxys schützen und den Zugriff per URL steuern können. Es ist geeignet, wenn der Anwendungsserver OpenID Connect oder SAML nicht unterstützt, die Installation eines Clientadapters schwierig ist oder die Umgebung den Clientadapter nicht unterstützt.
Die Hauptfunktionen sind wie folgt.
--HTTP (S) Liverpro-Funktion --OpenID Connect-Integration mit dem Keycloak-Server
Dieses Mal werde ich das Verfahren zum Schutz mit Security Proxy für die ursprüngliche Beispielanwendung von Tomcat 8 ausprobieren.
Die Testumgebung ist diesmal so. Auf dem Keycloak-Server wurde ein Demo-Bereich erstellt (siehe Artikel zu Tag 3) und Benutzer mit den folgenden Rollen Es wird angenommen, dass es existiert.
FQDN | OS | JDK | Verfassung | HÖREN Port |
---|---|---|---|---|
kc-server.example.com | CentOS 7.4.1708 | OpenJDK 1.8.0.151 | · Keycloak-Server 3.3.0.CR2 | 8443 |
kc-proxy.example.com | CentOS 7.4.1708 | OpenJDK 1.8.0.151 | ・ Sicherheitsproxy 3.3.0.CR2 ・ Tomcat 8.5.23 |
43 18443(Security Proxy) 80 8080(Tomcat) |
Nutzer | rollen |
---|---|
user001 | user |
admin001 | user,admin |
In der mit Tomcat gelieferten Beispielanwendung wird davon ausgegangen, dass die folgende Zugriffssteuerung angewendet wird.
Die Zugriffsports zu jedem Server bei der Überprüfung des Vorgangs sind wie folgt.
Gültiger Umleitungs-URI
kann auch per Platzhalter in Keycloak angegeben werden. Die OIDC-Spezifikationen erfordern jedoch, dass sie genau mit redirect_uri übereinstimmen. Daher geben wir hier alle möglichen URLs an, zu denen umgeleitet werden soll. Daher können Sie vom nicht protokollierten Status nicht direkt zu einer hier nicht angegebenen URL wechseln.Installieren und starten Sie Tomcat 8.0 als Beispielanwendung zur Überprüfung der Zusammenarbeit.
cd /tmp
wget http://ftp.tsukuba.wide.ad.jp/software/apache/tomcat/tomcat-8/v8.5.23/bin/apache-tomcat-8.5.23.tar.gz
tar zxvf apache-tomcat-8.5.23.tar.gz -C /usr/local
cd /usr/local/apache-tomcat-8.5.23/
./bin/startup.sh
Laden Sie den Sicherheitsproxy herunter, entpacken Sie ihn in "/ usr / local" und ändern Sie ihn in das extrahierte Verzeichnis.
cd /tmp
wget https://downloads.jboss.org/keycloak/3.3.0.CR2/keycloak-proxy-3.3.0.CR2.zip
unzip keycloak-proxy-3.3.0.CR2.zip -d /usr/local
cd /usr/local/keycloak-proxy-3.3.0.CR2/
Erstellen Sie die folgende Konfigurationsdatei, um Security Proxy zu betreiben.
json:/usr/local/keycloak-proxy-3.3.0.CR2/proxy.json
{
"target-url": "http://localhost:8080",
"send-access-token": true,
"bind-address": "{IP-Adresse / DNS-Name zum Binden}",
"http-port": "18080",
"https-port": "18443",
"applications": [
{
"base-path": "/",
"adapter-config": {
"realm": "demo",
"resource": "kc-proxy",
"auth-server-url": "https://kc-server.example.com:8443/auth",
"ssl-required" : "external",
"credentials": {
"secret": "{Keycloak serverseitiger geheimer Wert}"
}
},
"constraints": [
{
"pattern": "/*",
"authenticate": true
},
{
"pattern": "/examples/jsp/*",
"permit": true
},
{
"pattern": "/examples/websocket/*",
"roles-allowed": [
"admin"
]
}
]
}
]
}
Die Bedeutung der Einstellungsparameter in proxy.json wird unten beschrieben.
Parametername | Verpflichtend | Erläuterung |
---|---|---|
target-url | ○ | Geben Sie die Liverpro-Weiterleitungsziel-URL an. |
send-access-token | KEYCLOAK_ACCESS_Gibt an, ob das Zugriffstoken mit dem Headernamen TOKEN an das Proxy-Ziel gesendet werden soll. | |
bind-address | Geben Sie den DNS-Namen oder die IP-Adresse an, die an den Socket des Proxyservers gebunden werden soll. Geben Sie bei einer Verbindung von außen einen anderen Wert als die Loopback-Adresse an. | |
http-port | Geben Sie die Portnummer an, die als HTTP abgehört werden soll. Ob jedoch ein HTTP-Zugriff zulässig ist, wird später beschrieben.adapter-config vonssl-required von設定値に依存します。 |
|
https-port | Geben Sie die Portnummer an, die als HTTPS abgehört werden soll. | |
keystore | Geben Sie den Schlüsselspeicher an, der beim Akzeptieren von HTTPS verwendet wird. Wenn Sie keinen Schlüsselspeicher angeben, wird das automatisch generierte temporäre selbstsignierte Serverzertifikat verwendet. | |
keystore-password | Geben Sie das Schlüsselspeicherkennwort an, wenn der Schlüsselspeicher angegeben wird. | |
key-password | Geben Sie das Schlüsselkennwort des zu verwendenden Serverzertifikats an. | |
buffer-size | Gibt die Socket-Puffergröße des HTTP-Servers an. Normalerweise ist die Standardeinstellung in Ordnung. | |
buffers-per-region | Gibt die Anzahl der Socket-Puffer für jede Region des HTTP-Servers an. Normalerweise ist die Standardeinstellung in Ordnung. | |
io-threads | Gibt die Anzahl der Threads an, die E / A verarbeiten sollen. Normalerweise ist die Standardeinstellung in Ordnung. | |
worker-threads | Gibt die Anzahl der Threads an, die die Anforderung verarbeiten sollen. Normalerweise ist die Standardeinstellung in Ordnung. |
Parametername | Verpflichtend | Erläuterung |
---|---|---|
base-path | ○ | Gibt den Kontextstamm der Anwendung an."/"Muss mit beginnen. |
error-page | Wenn ein Fehler auftritt(Einschließlich, wenn der Zugriff verweigert wird)Gibt die Fehlerseite an, auf der angezeigt werden soll. Base-Geben Sie den relativen Pfad vom Pfad an. | |
adapter-config | ○ | Es wird später beschrieben. |
Parametername | Verpflichtend | Erläuterung |
---|---|---|
realm | ○ | Geben Sie den Realm-Namen auf der Keycloak-Seite an. |
resource | ○ | Client-ID in den Client-Einstellungen auf der Keycloak-Seite(client-id)Angegeben. |
auth-server-url | ○ | Geben Sie die Basis-URL auf der Keycloak-Seite an.[^auth-server-url] |
credentials | △ | Mit dem Zugriffstyp auf der Keycloak-Seite"confidential"Erforderlich, wenn Sie angeben. |
ssl-required | Gibt an, ob der Zugriff über HTTPS erzwungen werden soll."all", "external", "none"Geben Sie eine der folgenden Optionen an. Der Standardwert ist"external"Daher ist der HTTP-Zugriff von außen nicht zulässig. |
: information_source: Da es so viele Einstellungen für die Adapterkonfiguration gibt, werden nur die Mindestelemente aufgelistet, die für die Funktionsprüfung erforderlich sind. Weitere Parameter finden Sie unter Referenz "Java Adapter Config".
Parametername | Verpflichtend | Erläuterung |
---|---|---|
pattern | ○ | Geben Sie das URL-Muster an."/"Muss mit einem Platzhalter beginnen(*)Kann nur am Ende angegeben werden. Gültige Muster:/foo/bar/*und/foo/*.txt Ungültiges Muster:/*/foo/* |
roles-allowed | Diese Einstellung ermöglicht nur den Zugriff auf Benutzer mit einer bestimmten Rolle. Sie können mehrere in einem Array angeben. | |
methods | Geben Sie die zulässigen HTTP-Methodennamen in einem Array an. | |
excluded-methods | Geben Sie den Namen der HTTP-Methode an, die als Array verweigert werden soll. | |
deny | Auf true setzen, um den Zugriff zu verweigern(URLs, auf die Sie nicht über Keycoak Security Proxy usw. zugreifen möchten)。 | |
permit | Auf true setzen, um den Zugriff ohne Authentifizierung zu ermöglichen. | |
permit-and-inject | Auf true setzen, um den Zugriff ohne Authentifizierung zu ermöglichen. Wenn es jedoch authentifiziert ist und darauf zugegriffen wird, werden Benutzerinformationen zum Header hinzugefügt. | |
authenticate | Setzen Sie diesen Wert auf true, wenn Sie unabhängig von der Rolle nur über die Authentifizierung zugreifen möchten. |
Nach dem Erstellen von proxy.json können Sie Security Proxy mit dem folgenden Befehl starten.
cd /usr/local/keycloak-proxy-3.3.0.CR2/
java -jar bin/launcher.jar proxy.json
Wenn es kein Problem mit der Einstellungsdatei gibt, wird die folgende Startmeldung angezeigt.
Home directory: /usr/local/keycloak-proxy-3.3.0.CR2
11 24, 2017 6:44:37 Uhr org.keycloak.proxy.ProxyServerBuilder initConnections
WARN: Generating temporary SSL cert
11 24, 2017 6:44:45 Uhr org.xnio.Xnio <clinit>
INFO: XNIO version 3.3.6.Final
11 24, 2017 6:44:45 Uhr org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.6.Final
Dieses Mal habe ich bestätigt, wie Keycloak und Security Proxy mit der ID verknüpft werden. Grundsätzlich können Sie die ID-Verknüpfung mit Keycloak überprüfen, indem Sie eine JSON-Datei zum Einstellen platzieren. Ich denke, dass dies als einfache Funktionsprüfung vom Typ Rivapro nützlich ist.
Es gibt jedoch einige Funktionsmängel als Liverpro, wenn Security Proxy ernsthaft in das System integriert wird.
Wenn Sie die Rivapro-Typkonfiguration verwenden, verwenden Sie daher "Versuchen Sie, die Rivapro-Typkonfiguration mit Keycloak (mod_auth_openidc Edition) zu erstellen", die ich im Artikel am 8. Tag erläutere, und kompensieren Sie dabei die oben genannten Mängel, Rivapro Flexible Einstellungen sind verfügbar.
[^ auth-server-url]: Wenn Sie ein selbstsigniertes Serverzertifikat für die SSL-Verbindung mit dem Keycloak-Server verwenden, muss das Serverzertifikat in den Java-Truststore auf der Seite des Sicherheitsproxys importiert werden. (Da der Sicherheitsproxy über SSL direkt mit dem Keycloak-Server kommuniziert)
Recommended Posts