Cette fois, le 7ème jour du calendrier de l'Avent Keycloak, nous allons essayer le proxy de sécurité de Keycloak.
Security Proxy est un type de serveur proxy inverse simple (ci-après Rivapro) implémenté en Java. Le serveur Liverpro lui-même remplace l'adaptateur client de Keycloak, vous permettant de protéger le contenu du proxy et de contrôler l'accès sur une base par URL. Il convient à une utilisation lorsque le serveur d'applications ne prend pas en charge OpenID Connect ou SAML, il est difficile d'installer un adaptateur client ou l'environnement ne prend pas en charge l'adaptateur client.
Les principales fonctions sont les suivantes.
Cette fois, je vais essayer la procédure de protection avec Security Proxy pour l'exemple d'application d'origine de Tomcat 8.
L'environnement d'essai cette fois est comme ça.
Un royaume demo
a été créé sur le serveur Keycloak (voir l'article du jour 3 (https://qiita.com/tamura__246/items/4290a1035e1adcab733b)), et les utilisateurs avec les rôles suivants On suppose qu'il existe.
FQDN | OS | JDK | Constitution | Port LISTEN |
---|---|---|---|---|
kc-server.example.com | CentOS 7.4.1708 | OpenJDK 1.8.0.151 | · Serveur Keycloak 3.3.0.CR2 | 8443 |
kc-proxy.example.com | CentOS 7.4.1708 | OpenJDK 1.8.0.151 | ・ Proxy de sécurité 3.3.0.CR2 ・ Tomcat 8.5.23 |
・ 18443(Security Proxy) ・ 8080(Tomcat) |
utilisateur | rouleau |
---|---|
user001 | user |
admin001 | user,admin |
Dans l'application d'exemple fournie avec Tomcat, on suppose que le contrôle d'accès suivant est appliqué.
Les ports d'accès à chaque serveur lors de la vérification de l'opération sont les suivants.
Créer
en haut à droite.Save
.
--Type d'accès: confidentielUn URI de redirection valide
peut également être spécifié par un caractère générique sur Keycloak. Cependant, les spécifications OIDC exigent qu'il corresponde exactement à redirect_uri, nous spécifions donc ici toutes les URL possibles vers lesquelles rediriger. Par conséquent, vous ne pouvez pas passer directement à une URL non spécifiée ici à partir de l'état non connecté.Installez et démarrez Tomcat 8.0 comme exemple d'application pour vérifier la coopération.
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
Téléchargez le proxy de sécurité, décompressez-le dans / usr / local
et changez-le dans le répertoire extrait.
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/
Créez le fichier de configuration suivant pour utiliser Security Proxy.
json:/usr/local/keycloak-proxy-3.3.0.CR2/proxy.json
{
"target-url": "http://localhost:8080",
"send-access-token": true,
"bind-address": "{Adresse IP / nom DNS à lier}",
"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": "{Valeur secrète côté serveur Keycloak}"
}
},
"constraints": [
{
"pattern": "/*",
"authenticate": true
},
{
"pattern": "/examples/jsp/*",
"permit": true
},
{
"pattern": "/examples/websocket/*",
"roles-allowed": [
"admin"
]
}
]
}
]
}
La signification des paramètres de configuration dans proxy.json est décrite ci-dessous.
Le nom du paramètre | Obligatoire | La description |
---|---|---|
target-url | ○ | Spécifiez l'URL de transfert Liverpro. |
send-access-token | KEYCLOAK_ACCESS_Spécifie s'il faut envoyer le jeton d'accès à la destination proxy avec le nom d'en-tête TOKEN. | |
bind-address | Spécifiez le nom DNS ou l'adresse IP à lier au socket du serveur proxy. Lors de la connexion depuis l'extérieur, spécifiez une valeur autre que l'adresse de bouclage. | |
http-port | Spécifiez le numéro de port à écouter en tant que HTTP. Cependant, si l'accès HTTP est autorisé sera décrit plus tard.adapter-config dessl-required de設定値に依存します。 |
|
https-port | Spécifiez le numéro de port à écouter en HTTPS. | |
keystore | Spécifiez le magasin de clés utilisé lors de l'acceptation de HTTPS. Si vous ne spécifiez pas de fichier de clés, le certificat de serveur auto-signé temporaire généré automatiquement sera utilisé. | |
keystore-password | Spécifiez le mot de passe du fichier de clés lorsque le fichier de clés est spécifié. | |
key-password | Spécifiez le mot de passe clé du certificat de serveur à utiliser. | |
buffer-size | Spécifie la taille de la mémoire tampon de socket du serveur HTTP. Normalement, la valeur par défaut est correcte. | |
buffers-per-region | Spécifie le nombre de tampons de socket pour chaque région du serveur HTTP. Normalement, la valeur par défaut est correcte. | |
io-threads | Spécifie le nombre de threads pour traiter les E / S. Normalement, la valeur par défaut est correcte. | |
worker-threads | Spécifie le nombre de threads pour traiter la demande. Normalement, la valeur par défaut est correcte. |
Le nom du paramètre | Obligatoire | La description |
---|---|---|
base-path | ○ | Spécifie la racine de contexte de l'application."/"Doit commencer par. |
error-page | Si une erreur survient(Y compris lorsque l'accès est refusé)Spécifie la page d'erreur dans laquelle afficher. base-Spécifiez le chemin relatif à partir du chemin. | |
adapter-config | ○ | Il sera décrit plus tard. |
Le nom du paramètre | Obligatoire | La description |
---|---|---|
realm | ○ | Spécifiez le nom du domaine du côté Keycloak. |
resource | ○ | ID client dans les paramètres client côté Keycloak(client-id)Est spécifié. |
auth-server-url | ○ | Spécifiez l'URL de base du côté Keycloak.[^auth-server-url] |
credentials | △ | Avec le type d'accès côté Keycloak"confidential"Obligatoire si vous spécifiez. |
ssl-required | Spécifie s'il faut forcer l'accès via HTTPS."all", "external", "none"Spécifiez l'un des. La valeur par défaut est"external"Par conséquent, l'accès HTTP n'est pas autorisé de l'extérieur. |
: information_source: Comme il y a tellement de paramètres de configuration d'adaptateur, seuls les éléments minimum requis pour la vérification de fonctionnement sont répertoriés. Pour les autres paramètres, voir Référence "Java Adapter Config".
Le nom du paramètre | Obligatoire | La description |
---|---|---|
pattern | ○ | Spécifiez le modèle d'URL."/"Doit commencer par un joker(*)Ne peut être spécifié qu'à la fin. Modèles valides:/foo/bar/*et/foo/*.txt Modèle non valide:/*/foo/* |
roles-allowed | Ce paramètre autorise l'accès uniquement aux utilisateurs avec un rôle spécifique. Vous pouvez en spécifier plusieurs dans un tableau. | |
methods | Spécifiez les noms de méthode HTTP autorisés dans un tableau. | |
excluded-methods | Spécifiez le nom de la méthode HTTP à rejeter en tant que tableau. | |
deny | Définir sur true pour refuser l'accès(URL auxquelles vous ne souhaitez pas accéder via Keycoak Security Proxy, etc.)。 | |
permit | Définissez sur true pour activer l'accès sans authentification. | |
permit-and-inject | Définissez sur true pour activer l'accès sans authentification. Cependant, s'il est authentifié et accédé, les informations utilisateur seront ajoutées à l'en-tête. | |
authenticate | Définissez sur true si vous souhaitez accéder uniquement par authentification, quel que soit le rôle. |
Après avoir créé proxy.json, vous pouvez démarrer Security Proxy à partir de la commande suivante.
cd /usr/local/keycloak-proxy-3.3.0.CR2/
java -jar bin/launcher.jar proxy.json
S'il n'y a pas de problème avec le fichier de configuration, le message de démarrage suivant s'affiche.
Home directory: /usr/local/keycloak-proxy-3.3.0.CR2
11 24, 2017 6:44:37 pm org.keycloak.proxy.ProxyServerBuilder initConnections
WARN: Generating temporary SSL cert
11 24, 2017 6:44:45 pm org.xnio.Xnio <clinit>
INFO: XNIO version 3.3.6.Final
11 24, 2017 6:44:45 pm org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.6.Final
Cette fois, j'ai confirmé comment lier Keycloak et Security Proxy avec ID. Fondamentalement, vous pouvez vérifier la liaison ID avec Keycloak simplement en plaçant un fichier json pour le réglage, donc je pense que c'est utile comme simple vérification de fonctionnement du type Rivapro.
Cependant, il existe des lacunes fonctionnelles en tant que Liverpro lors de l'incorporation sérieuse du proxy de sécurité dans le système.
Par conséquent, lors de l'utilisation de la configuration de type Rivapro, en utilisant "Essayer de construire la configuration de type Rivapro avec Keycloak (édition mod_auth_openidc)" que j'explique dans l'article du 8ème jour, tout en compensant les lacunes ci-dessus, Rivapro Des paramètres flexibles sont disponibles.
[^ auth-server-url]: lors de l'utilisation d'un certificat de serveur auto-signé pour la connexion SSL avec le serveur Keycloak, il est nécessaire d'importer le certificat de serveur dans le magasin de clés de confiance Java du côté du proxy de sécurité. (Parce que le proxy de sécurité communique directement avec le serveur Keycloak via SSL)
Recommended Posts