PHP-MongoDB Impossible de s'authentifier

Le problème exposé dans ce sujet a été résolu.

Salut tout le monde !

Je me bats désespérément avec le driver PHP de MongoDB pour l’authentification.

J’ai une base MongoDB en version 3.4.5 et j’utiliser le driver PHP MongoDB le plus à jour, soit celui-ci.

J’ai donc, pour avoir un minimum de sécurité, ajouter des utilisateurs et me servir de l’authentification pour restreindre les accès.

J’ai donc créé un utilisateur (en regardant ici), grâce à l’outil de DB Robo3T. Bref, tout marche nickel, je peux m’y connecter etc.

Par contre, lorsque j’ai tenté de me connecter depuis le client PHP, impossible.

La documentation est VIDE sur la question de l’authentification mis à part quelques lignes à droite à gauche, et en réunissant tout ça, j’obtiens toujours la même erreur: Authentication failed (blog\vendor\mongodb\mongodb\src\Operation\Find.php(219): MongoDB\Driver\Server->executeQuery('blog.articles', Object(MongoDB\Driver\Query), Object(MongoDB\Driver\ReadPreference))).
(a croire que les devs de chez mongodb n’en ont rien à faire de l’authentification…)

Mon dernier code source de test, censé être valide selon la doc PHP Mongodb:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
$login_params = [
    'host' => $config->database->host ?? 'localhost',
    'port' => $config->database->port ?? '27017'
];
$auth_params = [
    'auth'     => $config->database->auth,
    'username' => $config->database->username,
    'password' => $config->database->password,
    'auth_db'  => $config->database->auth_db
];

$uri = 'mongodb://'
    . $login_params['host'] . ':' . $login_params['port'].'/';
$args = ($auth_params['auth'] ? [
    'username' => $auth_params['username'],
    'password' => $auth_params['password'],
    'authSource' => $auth_params['auth_db']
] : []);

$connection = new MongoDB\Client($uri, $args);

Et la configuration vient de ce fichier:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
return new \Phalcon\Config([
    'database' => [
        'host'        => '192.168.99.100',
        'port'        => '27017',
        'auth'        => true,
        'username'    => '8RpfF9i-PiFl)cjq',
        'password'    => 'tsXGPMSDCil2p71L5S9Wg3caMYVqZ89d',
        'auth_db'     => 'admin'
    ],
    'application' => [
        'appDir'         => APP_PATH . '/',
        'controllersDir' => APP_PATH . '/controllers/',
        'modelsDir'      => APP_PATH . '/models/',
        'migrationsDir'  => APP_PATH . '/migrations/',
        'viewsDir'       => APP_PATH . '/views/',
        'pluginsDir'     => APP_PATH . '/plugins/',
        'libraryDir'     => APP_PATH . '/library/',
        'cacheDir'       => BASE_PATH . '/cache/',

        // This allows the baseUri to be understand project paths that are not in the root directory
        // of the webpspace.  This will break if the public/index.php entry point is moved or
        // possibly if the web server rewrite rules are changed. This can also be set to a static path.
        'baseUri'        => preg_replace('/public([\/\\\\])index.php$/', '', $_SERVER["PHP_SELF"]),
    ]
]);

Je suis donc totalement bloqué, sans la moindre idée de comment procéder. Merci d’avance pour l’aide !

(a croire que les devs de chez mongodb n’en ont rien à faire de l’authentification…)

Artemix

C’est le cas, oui. Faut jamais ouvrir le port de Mongo sur ton serveur.

Je connais rien à PHP (wtf la syntaxe foo ?? bar que tu utilises o_O ) mais après 3min sur un moteur de recherche je vois ça : http://docs.php.net/manual/en/mongodb-driver-manager.construct.php

Il te suffit donc de passer ton user/pass dans l’URI du serveur : mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

C’est presque toujours comme ça pour mongo. Description de l’URI si t’as besoin : https://docs.mongodb.com/manual/reference/connection-string/

+0 -0

wtf la syntaxe foo ?? bar que tu utilises o_O

victor

Il me semble que c’est similaire au || en JS mais je ne connais pas les spécificités.

tleb

C’est un nouvel opérateur de comparaison disponible depuis PHP 7.

Opérateur d’union nul
Retourne la première opérande depuis la gauche vers la droite qui existe, et différent de NULL. Si rien n’existe, NULL sera retourné.
php.net/manual/fr/language.operators.comparison.php

Donc question bête, Artemix, ton serveur tourne bien sur une version de PHP 7 ?

+0 -0

Oui, pas de prob pour ça, PHP7.1.4 !

J’ai résolu le problème, c’était une config interne à MongoDB qui était foirée, un prob de droits de connexion, rien à voir avec mon script.

Ps: vu que je n’ai pas d’autre moyen pour l’instant, vu que ma DB MongoDB est sur un autre serveur, j’ai le port ouvert mais connexion 100% restreinte (aucune action n’est possible sans être auth).

Je cherche encore à faire un setup SSL, mais la doc sur SSL, comme pour la doc PostgreSQL, est franchement obscure, donc ça avance doucement… :/

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte