[RESOLU] Perte sessionid dans /users/{domainUid}/byLogin/{login}

Bonjour

J’utilise l’API /users/{domainUid}/byLogin/{login} de la manière suivante :

  1. je me connecte à Bluemind
  2. je fais un “try it out” avec les bons paramètres
  3. je copie la commande curl obtenue et je la mets dans un script bash par exemple.

Le script fonctionne pendant un certain temps ensuite j’ai un message me disant que j’ai perdu la session :
{“errorCode”:“FORBIDDEN”,“errorType”:“ServerFault”,“message”:“session id is not valid”}

Lorsque je reviens sur l’interface bluemind j’ai effectivement ma session fermée, je la rouvre et je génère de nouveau la commande curl qui a un autre X-BM-ApiKey. Si je colle ce X-BM-ApiKey dans le script bash à la place de l’ancien tout refonctionne. J’en déduit que ce X-BM-ApiKey fonctionne comme un sessionid.

Ma question est donc la suivante : comment hors bluemind ouvrir une session pour que je puisse avoir un X-BM-ApiKey de telle sorte que je puisse utiliser la fonction mentionnée dans le sujet ?

Merci

Hello,

il faut utiliser l’API “auth” pour récupérer une clé d’API:

curl -X POST -k --header ‘Content-Type: application/json’ --header ‘Accept: application/json’ -d ‘""’ ‘https:///api/auth/login?login=login@domain

Bonjour,

La fonction curl fonctionne bien avec l’API
curl -X POST --header ‘Content-Type: application/json’ --header ‘Accept: text/html’ -d ‘admin’ ‘https:///api/auth/login?login=admin@domain.com’

mais la request url correspondante fournit par la doc API ne fonctionne pas
https:///api/auth/login?login=admin@domain.com

Merci de votre aide

Bonjour

Réponse à Tommy.

Ca fonctionne je fait d’abord une requête auth, je récupère la authKey de la réponse, je mets cette authKey à la place de X-BM-ApiKey et la requête /users/{domainUid}/byLogin/{login} fonctionne.

Merci Tommy.

Pour amichel si ça peut t’aider voici la requête auth :

curl -X POST -k --header ‘Content-Type: application/json’ --header ‘Accept: application/json’ -d ‘""’ ‘https://monserveur.mondomain.com/api/auth/login?login=admin@mondomain.com

Bien entendu tu dois remplacer :

monserveur.mondomain.com ou par le nom fqdn de ton serveur
– par le mot de passe de admin@mondomain.com

En espérant que ça t’aide.

Bonjour,

En fait j’ai compris mon erreur, je testais l’URL avec le REST Client de Firefox et dans body je passais mon password sans le mettre entre double quote “password”.
Or le format attendu par l’API en mode POST pour les paramètres d’entrée est du json … il est impératif de les mettre entre double quote.

Merci pour votre aide.

Arnaud

Pour ceux que ça intéresse voici un script bash qui permet de modifier les mots de passe d’une liste d’utilisateurs (sans le nom de domaine) se trouvant dans le fichier bm-mails-sorted.txt

#!/bin/bash

On se connecte en tant qu’admin du domaine mondomain.com.

res=curl -X POST -k --header 'Content-Type: application/json' --header 'Accept: application/json' -d '"<motdepasse>"' 'https://<BM server>/api/auth/login?login=admin@mondomain.com'
authKey=echo $res | sed -ne 's/.*"authKey":"\(-a-zA-Z0-9]*\)".*/\1/p'

On va construire un fichier csv “login sans le nom de domaine;uid bluemind”.

rm -f bm-mail-uid.txt
while read ligne
do
adresse=“https:///api/users/mondomain.com/byEmail/$ligne%40mondomain.com
res=curl -X GET --header 'Accept: application/json' --header "'X-BM-ApiKey: $authKey'" $adresse
res1=echo $res | sed -ne 's/.*"uid":"\(-a-zA-Z0-9]*\)".*/\1/p'
echo “$ligne;$res1” >> bm-mail-uid.txt
done < bm-mails-sorted.txt

On va lire le fichier précédent et on va construire un autre fichier CSV : “login sans le nom de domaine;uid bluemind;mot de passe”

Si en tant qu’admin on ne donne pas l’ancien password, l’API modifie quand même le mot de passe (ce qui est pratique).

rm -f bm-mail-uid-pwd.txt
while read ligne
do
pwd=pwgen -n 12 1
user=echo $ligne | cut -d';' -f1
uid=echo $ligne | cut -d';' -f2
res1=“curl -X POST --header ‘Content-Type: application/json’ --header ‘Accept: application/json’ --header ‘X-BM-ApiKey: $authKey’ -d ‘{ "currentPassword": "", "newPassword": "$pwd" }’ https:///api/users/mondomain.com/$uid/password_”
echo $res1 > c.sh
chmod +x c.sh
./c.sh
echo “$user;$uid;$pwd” >> bm-mail-uid-pwd.txt
done < bm-mail-uid.txt

Je suis passé par le fichier c.sh car si j’exécute directement res1 ainsi :

res1=curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'X-BM-ApiKey: $authKey' -d '{ \"currentPassword\": \"\", \"newPassword\": \"$pwd\" }' https://<BM Server>/api/users/mondomain.com/$uid/password_

J’ai une erreur de parsing du body … Si qqn a une idée mais le script tel quel est fonctionnel.