Bonjour,
j'ai eu des explications par ailleurs entre temps et il s'avère que l'exemple fourni va fonctionner avec un geoserver autonome qui gère ses propres utilisateurs. Le fait d'être dans une instance geoserver intégrée à un georchestra nécessite d'autres mécanismes car l'authentification est déportée au niveau du module CAS avec soit un compte local à georchestra (cas assez simple mais qui ne fonctionne pas avec mon exemple) ou avec des déports de l'authentification via des mécanismes SSO ou autre et là c'est plus complexe et à façon.
Au final pour m'en sortir j'utilise un compte local à l'IDS avec une première étape qui consiste à mémoriser les informations de session (ce qui n'était pas dans mon code exemple) avec une méthode telle que celle-ci :
def connect(self):
"""
Connecte à GeoOrchestra/GeoServer avec un compte local.
Retourne une session authentifiée ou None en cas d’échec.
"""
login_url = f"{self.base_url}/login"
session = requests.Session()
payload = {"username": self.username, "password": self.password}
try:
response = session.post(login_url, data=payload, allow_redirects=True)
if response.ok or "GeoOrchestra" in response.text:
print("[INFO] Connexion réussie")
return session
else:
print("[ERREUR] Échec de la connexion")
return None
except Exception as e:
print(f"[ERREUR connexion] {e}")
return None
Ensuite je réutilise ce résultat mémorisé dans une propriété session avec par exemple (listing des datastore d'un workspace) :
datastores_url = f"{self.base_url}/geoserver/rest/workspaces/{workspace}/datastores.json"
r = self.session.get(datastores_url)
r.raise_for_status()
datastores = r.json().get('dataStores', {}).get('dataStore', [])
On doit pouvoir clore ce ticket s'il n'y a pas surenchère.
Merci en tout cas d'avoir passé un peu de temps à essayer de m'aider.