Problème pour me connecter avec Keycloak

Bonjour, j’essaie d’activer la connexion avec Keycloak, mais je n’arrive pas à le faire fonctionner.

J’ai installé une instance Mobilizon avec Docker, image framasoft/mobilizon:3.2.0

J’ai ajouté à la fin du fichier config.exs :

config :ueberauth,
  Ueberauth,
  providers: [
    keycloak: {Ueberauth.Strategy.Keycloak, [default_scope: "email"]}
  ]

config :mobilizon, :auth,
  oauth_consumer_strategies: [
    {:keycloak, "Connexion Keycloak"}
  ]

keycloak_url = "https://app.please-open.it"

config :ueberauth, Ueberauth.Strategy.Keycloak.OAuth,
  client_id: "mobilizon",
  client_secret: "xxxxx",
  site: keycloak_url,
  authorize_url: "#{keycloak_url}/auth/realms/acd7cf0a-6131-4195-b4ef-cb73fe90095a/protocol/openid-connect/auth",
  token_url: "#{keycloak_url}/auth/realms/acd7cf0a-6131-4195-b4ef-cb73fe90095a/protocol/openid-connect/token",
  userinfo_url: "#{keycloak_url}/auth/realms/acd7cf0a-6131-4195-b4ef-cb73fe90095a/protocol/openid-connect/userinfo",
  token_method: :post

Quand j’essaie de me connecter j’arrive bien sur Keycloak, et après avoir mis mon login et mot de passe, je reviens sur l’écran de login mobilizon avec l’erreur suivante affichée : « Erreur lors de la connexion avec Keycloak. Réessayez ou bien connectez vous autrement. »

Quand je regarde les logs de l’image Docker, je vois juste un warning :

08:54:13.603 request_id=F4RpZ6EbLyDwby4AABch [info] GET /auth/keycloak
08:54:13.604 request_id=F4RpZ6EbLyDwby4AABch [info] Sent 302 in 804µs
08:54:13.741 request_id=F4RpZ6lTbWG7jbIAABdB [info] GET /auth/keycloak/callback
08:54:13.809 request_id=F4RpZ6lTbWG7jbIAABdB [warning] Unable to login user with keycloak %Ueberauth.Failure{provider: "keycloak", strategy: Ueberauth.Strategy.Keycloak, errors: [%Ueberauth.Failure.Error{message_key: "OAuth2", message: ""}]}
08:54:13.809 request_id=F4RpZ6lTbWG7jbIAABdB [info] Sent 302 in 67ms
08:54:13.834 request_id=F4RpZ67hCv1KSeAAABdh [info] GET /login
08:54:13.836 request_id=F4RpZ67hCv1KSeAAABdh [info] Sent 200 in 1ms
08:54:14.064 request_id=F4RpZ7yYZCV9YkUAABeB [info] POST /api
08:54:14.070 request_id=F4RpZ7yYZCV9YkUAABeB graphql_operation_name=FullConfig [info] Sent 200 in 6ms
08:54:14.082 request_id=F4RpZ72kXPiMjxkAABgB [info] POST /api
08:54:14.083 request_id=F4RpZ72kXPiMjxkAABgB graphql_operation_name=Registrations [info] Sent 200 in 1ms
08:54:14.153 request_id=F4RpZ8HjhQkbeaAAABhh [info] POST /api
08:54:14.155 request_id=F4RpZ8HjhQkbeaAAABhh graphql_operation_name=LoginConfig [info] Sent 200 in 1ms

Le message n’est pas très parlant, je ne vois pas trop d’où pourrait venir le problème.

Merci d’avance pour l’aide :slight_smile:

Bonjour,

Sans avoir testé, et de mémoire, est-ce que l’application a bien accès aux scopes pour avoir accès à l’email de l’utilisateur ?

Après vérification, l’application avait bien accès au scope email, mais c’était bien une erreur liée aux scopes.

Il y a eu une modification récente dans Keycloak qui bloque l’accès si on ne demande pas le scope openid en même temps : Get UserInfo return 401 Unauthorized · Issue #16844 · keycloak/keycloak · GitHub

J’ai donc ajouté le scope openid dans la configuration, et maintenant tout fonctionne

config :ueberauth,
  Ueberauth,
  providers: [
    keycloak: {Ueberauth.Strategy.Keycloak, [default_scope: "openid email"]}
  ]