Monthly Archives

2 Articles
Authentification sous MongoDB

Authentification sous MongoDB

Aujourd’hui, changement complet de technologie. Depuis quelques semaines au travail, nous migrons notre projet PHP/MySQL/JS vers du NodeJS/MongoDB avec une API REST. Je vais donc partager avec vous un point avec lequel j’ai eu un peu de mal : L’authentification avec MongoDB.

Je tiens à préciser que cet article ne remplace pas la documentation officielle et qu’ici, il ne s’agit que d’une mise en application à travers ce que j’ai compris. Si j’ai fait une erreur, merci de me le préciser en commentaires.

Précisions

Je ne m’attarderai pas sur qu’est-ce que MongoDB et quelles sont les différences avec une base de donnée relationnelle. Si vous voulez savoir ceci, je vous renvoie pour le moment vers cet article donnant la plupart des différences avec MySQL, CouchDB et MongoDB.

Mise en place

Si vous avez mongoDB installé sur votre serveur, vous savez aussi que vous avez, à l’instar de MySQL, un client disponible en ligne de commande, à savoir pour MongoDB : mongo. C’est avec cet outil que nous allons créer notre utilisateur.

Ensuite, il faut savoir que pour l’authentification, et ce peu importe la base de donnée cible, MongoDB s’appuie sur la liste des utilisateurs présents dans la base admin. Nous allons donc créer notre utilisateur simplement en faisant ceci :

use admin
db.addUser("nomduuser", "password")

Normalement, après avoir rentré ceci, mongo devrait vous retourner ce résultat :

{
    "user" : "test",
    "readOnly" : false,
    "pwd" : "a6de521abefc2fed4f5876855a3484f5",
    "_id" : ObjectId("517c027488495859945639e6")
} 

Votre user a été correctement créé. Au cas où, nous allons le vérifier grâce à la commande db.system.users.find() et elle devrait vous retourner la même chose que plus haut.

Bien, votre utilisateur a été créé mais vous pouvez vous connecter à votre serveur sans vous authentifier et effectuer toutes les actions que vous voulez. C’est normal car de base, MongoDB a désactivé la couche d’authentification.

Pour activer l’authentification, nous devrons modifier la configuration de mongoDB à partir du fichier mongod.conf en rajoutant simplement cette ligne :

auth = true

Ensuite, relancez simplement le processus mongod.

Pour tester l’authentification, vous avez plusieurs choix. Soit en lançant mongo, soit avec la commande mongo db.auth("login","password"), soit via votre application connectée au serveur ou soit via un logiciel d’administration pour MongoDB.

Personnellement, je les test grâce à l’application GenghisApp mais nous allons voir le cas avec la commande db.auth(). Relancez donc le client mongo et essayez d’ajouter un nouvel utilisateur. Vous devriez normalement avoir l’erreur suivante :

Sat Apr 27 19:09:58.263 JavaScript execution failed: error: 
{ "$err" : "not authorized for query on admin.system.users", "code" : 16550 } 
at src/mongo/shell/query.js:L128

C’est bon, le système d’authentification est en marche. Pour palier à ceci, faites juste la commande suivante :

db.auth("votrelogin","votremotdepasse")

Et mongoDB devrait vous laisser passer en retournant simplement 1. Si vous essayez de vous authentifier avec un login/password invalide, vous devriez avoir l’erreur suivante :

Error: 18 { ok: 0.0, errmsg: "auth fails" }
Lors des tests sur mon poste, la commande mongo me retournait une erreur d’authentification alors que GenghisApp arrivait bien à se connecter avec mon utilisateur. Apres plusieurs redémarrages de MongoDB, l’authentification s’est mise à marcher avec mongo.

Voilà, votre base MongoDB utilise maintenant l’authentification. Vous pouvez aller plus loin avec les différents droits existants au seins de MongoDB à l’instar de MySQL. Mais pour ça, je vous renvoie vers la Documentation officielle

Edition du 13 Mai :

Il semblerait qu’en plus de la base admin, si vous voulez accéder directement à votre application, vous devrez créer ce même utilisateur dans la base cible.

OSX, BASH et .bash_profile

OSX, BASH et .bash_profile

Bonjour à tous. Si vous êtes sur Mac OSX et que, comme moi, vous utilisez souvent votre terminal, vous avez dû vous apercevoir qu’il est plutôt sobre, qu’on ne voit pas la différence de couleur sur les types de fichiers/droits comme sous Ubuntu ou que quand on fait un petit setenv, on se fait gentiment renvoyer dans les roses.

Et bien laissez mois vous apprendre, ou vous répéter, que OSX utilise le shell BASH et donc, exécute des scripts particuliers pour enrichir et configurer votre terminal. À savoir ici, le fichier .bash_profile.

Nous n’allons pas voir en profondeur comment fonctionne ce fichier, de nombreux tutoriels existent. Google est votre amis si je puis dire. Non, ici nous allons juste voir comment enrichir notre variable PATH, comment définir de nouvelles variables qui peuvent s’avérer utiles (ex : ANDROID_HOME, ANT_HOME, …) et comment créer des alias de commandes. (ex untar au lieu de tar -zxf)

Justement, voici mon petit fichier ~/.bash_profile :

# alias de commandes unix
alias ls="ls -G"
alias untar="tar -zxf"

# definitions de nouvelles variables
export ANDROID_HOME=/usr/local/etc/android/sdk

# extension de $PATH
export PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools

Mon .bash_profile permet ceci :

  • Afficher, avec ls, une couleur par type/droit des fichiers comme sous Ubuntu
  • Décompresser facilement les fichiers .tar.gz avec les arguments principaux
  • Définir la variable ANDROID_HOME
  • Rajouter les commandes android à mon PATH pour les exécuter facilement dans le terminal.

Quand vous avez modifié votre .bash_profile, n’oubliez surtout pas de le recharger grâce à la commande source ~/.bash_profile

Bien entendu, le .bash_profile permet pleins d’autres choses comme l’ajout de nouvelles commandes, la redéfinition de votre prompt, … Libre aà vous de faire ce que vous voulez et de rendre votre terminal encore plus puissant que ce qu’il est déjà.

Cet article marche pour tous les systèmes utilisants un shell unix. Même Cygwin sous Windows est compatible.