Auth 尝试从 Fantom 脚本连接到托管在 MongoLab 中的 MongoDB 失败。怎么了?

Auth Failed trying to connect from a Fantom script to a MongoDB hosted in MongoLab. What's wrong?

我正在尝试连接到在 MongoLab using a Fantom v1.0.67 script. The driver I'm using is afMongo v1.0.4 中托管的远程 MongoDB v3.0.8。连接线为​​:

mongoClient := MongoClient(
    ActorPool(),
    `mongodb://mydbuser:mydbpassword@ds0#####.mongolab.com:#####/mymongodb`
)

请注意,占位符 mydbuser、mydbpassword 和 ##### 已替换为正确的值。当我 运行 来自 shell 的以下命令时,连接成功:

mongo ds0#####.mongolab.com:#####/mymongodb -u mydbuser -p mydbpassword

但是在 Fantom 脚本中,我得到了这个错误:

afMongo::MongoCmdErr: Command 'authenticate' failed. MongoDB says: auth failed
  afMongo::Operation.runCommand (Operation.fan:36)
  afMongo::Operation.runCommand (Operation.fan)
  afMongo::Connection$.authenticate (Connection.fan:34)
  afMongo::TcpConnection.authenticate (Connection.fan:51)
  afMongo::ConnectionManagerPooled.checkOut (ConnectionManagerPooled.fan:458)
  afMongo::ConnectionManagerPooled.leaseConnection (ConnectionManagerPooled.fan:320)
  afMongo::Cmd.run (Cmd.fan:71)
  afMongo::Database.runCmd (Database.fan:36)
  afMongo::MongoClient.runAdminCmd (MongoClient.fan:107)
  afMongo::MongoClient.buildInfo (MongoClient.fan:64)
  afMongo::MongoClient.startup (MongoClient.fan:119)
  afMongo::MongoClient.makeFromUri$ (MongoClient.fan:41)
  afMongo::MongoClient.makeFromUri$ (MongoClient.fan)
  afMongo::MongoClient.makeFromUri (MongoClient.fan:38)

我也尝试过 Robomongo v0.8.4,结果相似:弹出对话框说...

我 运行 Fantom 脚本以及 Robomongo 成功连接并验证了本地托管的 MongoDB v2.6.3 和 v3.0.8 数据库。

我的 Java 版本是 Java(TM) SE Runtime Environment (build 1.8.0_05-b13)

我不知道 Robomongo 或 Fantom/afMongo 是否依赖于 Java 或已过时的系统库。

请问出了什么问题或我应该检查什么?

Robomongo v0.8.4 和 afMongo 1.0.4 中的身份验证失败是由于 MongoDB v3 called SCRAM-SHA-1 中的新身份验证机制。

afMongo 已更新为在 SASL 上实现了 SCRAM-SHA-1。它会自动检测 Mongo v3 数据库并切换身份验证协议,在需要时回退到旧的 MONGODB-CR - 请参阅 this commit.

这些更改尚未发布,因为它依赖于一种仅在 Fantom 1.0.68 中可用的新方法 Buf.pbk(...) - 它本身未发布。更新后的 afMongo v1.0.6 将在 Fantom 1.0.68 发布后立即发布。

您可以从源代码编译 Fantom 1.0.68 和 afMongo 1.0.6,但老实说,最简单的修复(同时)是只使用 v2.6 MongoDB数据库。

请注意,如果需要,MongoChef GUI 客户端可以针对 MongoDB v3 数据库进行身份验证。