2017-07-23 3 views
1

Le contexte d'application est une application nœud js avec un mongo db utilisant un serveur keycloak pour les autorisations avec ID ouvert. Pour l'environnement de développement, nous avons un conteneur mongo, un conteneur keycloak et le conteneur du serveur d'applications.Autorisations Keycloak en mode pont du docker: comment accéder à localhost?

Le conteneur Keycloak a un mappage de port sur 8080 afin que je puisse accéder à la console de configuration keycloak sur http://localhost:8080.

conteneur Application a un mappage de port sur 9000 pour accéder à l'application elle-même sur http://localhost:9000.

Tous les 3 conteneurs sont à l'intérieur d'un réseau docker comme application_default (commencé avec Compose docker).

Dans l'application, les informations nécessaires à Openid auth avec keycloak est géré par les variables d'environnement suivantes:

# KEYCLOAK CREDENTIALS 
APP_KEYCLOAK_REALM="http://localhost:8080/auth/realms/myrealm" 
APP_KEYCLOAK_RETURN_URL="http://localhost:9000/api/auth/openid/return" 
APP_KEYCLOAK_CLIENT_ID=myapplication 
APP_KEYCLOAK_CLIENT_SECRET="00d5c908-eade-4e26-bcf0-b9341ghie197" 

Ces paramètres doesnt travail, très normalement en fait comme à l'intérieur du conteneur d'application, la valeur APP_KEYCLOAK_REALM de localhost:8080 ne se réfère pas à mon PC (et keycloak) mais au conteneur de l'application.

Maintenant, quand je remplacerai avec

APP_KEYCLOAK_REALM="http://keycloak:8080/auth/realms/myrealm" 

l'application peut aller à keycloak mais pour l'authentification, mon navigateur est coincé essayer de me rediriger l'autorisation d'une URL qui ne veut pas dire quoi que ce soit à lui en commençant par http://keycloak:8080/auth/realms...

la seule façon que j'ai réussi à avoir le travail de configuration est en mettant l'adresse IP réelle de mon PC dans le fichier de l'environnement:

# KEYCLOAK CREDENTIALS 
APP_KEYCLOAK_REALM="http://192.168.1.34:8080/auth/realms/myrealm" 
APP_KEYCLOAK_RETURN_URL="http://192.168.1.34:9000/api/auth/openid/return" 
APP_KEYCLOAK_CLIENT_ID=myapplication 
APP_KEYCLOAK_CLIENT_SECRET="00d5c908-eade-4e26-bcf0-b9341ghie197" 

Cela fonctionne mais ne semble pas l'idéal pour la portabilité (adresse IP change tout le temps).

est-il un moyen standard de le faire? Peut être rediriger localhost dans docker dns à l'hôte docker? autres?

Répondre

0

Il y a peu de choses que vous pouvez faire à ce sujet. La première consiste à utiliser les entrées d'hôte sur votre hôte local pour keycloak. De cette façon, votre navigateur sur l'hôte reconnaîtra l'hôte keycloak et l'utilisera pour l'authentification.

Sinon, vous ne devriez pas le faire de cette façon. Vous devez mettre un conteneur nginx pour lequel le port 80 est mappé à l'hôte. Et puis vous pouvez utiliser des modèles basés sur l'URL pour rediriger vers le port 8000 ou 9000