0
votes

Q - Cannot authenticate via Mongo Java Driver. Things work fine on mongo shell.

MongoDB Server Version -

db version v3.2.6

Java Mongodb Driver Maven Dependency

version 2.6.2

This is what I did -

  1. Start MongoDB - sudo mongod --port 27017 --dbpath /data/db
  2. Open shell - mongo --port 27017
  3. use admin
  4. db.createUser({user:"abc",pwd:"abc",roles:[{role:"root",db:"admin"}]})
  5. Restart with auth required - sudo mongod --auth --port 27017 --dbpath /data/db

Java side

MongoOptions moptions = new MongoOptions();
moptions.autoConnectRetry = Boolean.getBoolean(prop.getProperty("MONGO_OPTIONS_AUTOCONNECT_RETRY"));
moptions.connectionsPerHost = Integer.parseInt(prop.getProperty("MONGO_OPTIONS_CONNECTIONS_PER_HOST"));
moptions.threadsAllowedToBlockForConnectionMultiplier = Integer.parseInt(prop.getProperty("MONGO_OPTIONS_THREADS_BLOCK"));
ServerAddress srvAddr = new ServerAddress(prop.getProperty("MONGODB_HOST"),                     Integer.parseInt(prop.getProperty("MONGODB_PORT")));        
client = new Mongo(srvAddr, moptions);

DB adminDB = client.getDB("admin");
Boolean auth = adminDB.authenticate("abc", "abc".toCharArray());

Result

auth always comes out FALSE.

1

1 Answers

1
votes

The authentication procedure for the MongoDB Java driver 2.x I know works as follows:

    MongoCredential credential = MongoCredential.createCredential(
            user, "admin", password.toCharArray());
    Mongo mongo = new MongoClient(new ServerAddress(mongoHostname), 
            Arrays.asList(credential));

Note for accessing a Mongo 3.2 database using a 2.x driver you need at least MongoDB Java driver Version 2.14 (see MongoDB compatibility info). Your version 2.6.2 is way too old. You need to upgrade it.