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?