无法使用 mongodb golang 驱动程序进行身份验证

时间:2021-03-20 09:06:46

标签: mongodb mongo-go-driver

我使用的是 mongodb 社区版本 4.2.13 和驱动程序版本 1.5。

我的 go 应用程序与 db 在同一台主机上运行,​​但在尝试建立连接时出现以下错误:

connection() error occured during connection handshake: auth error:
sasl conversation error: unable to authenticate using mechanism
"SCRAM-SHA-256": (AuthenticationFailed) Authentication failed.

这是我创建管理员帐户的方式:

use admin
db.createUser({
  user: "admin1",
  pwd: "passwd12#$",
  roles: ["root"],
  mechanisms: ["SCRAM-SHA-256"]
})

db.system.users.update(
  { _id: "admin.admin1", "db": "admin" },
  {
    $addToSet: {
      authenticationRestrictions: { clientSource: ["127.0.0.1"] }
    }
  }
)

Go 应用代码片段

package main

import (
    "context"
    "fmt"
    "time"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
)

func main() {
    uri := fmt.Sprintf(
        "mongodb://%s:%s@%s:%d/admin?authSource=admin&authMechanism=SCRAM-SHA-256",
        "admin1",
        "passwd12#$",
        "127.0.0.1",
        27017,
    )
 
    // Prints "mongodb://admin1:passwd12#$@127.0.0.1:27017/admin?authSource=admin&authMechanism=SCRAM-SHA-256"
    fmt.Println(uri)
    ctx, cancel := context.WithTimeout(context.Background(), 10 * time.Second)
    defer cancel()
    client, err := mongo.Connect(
        ctx,
        options.Client().ApplyURI(uri),
    )
    if err != nil {
        panic(err)
    }
    defer func() {
        err = client.Disconnect(ctx)
        if err != nil {
            panic(err)
        }
    }()
    err = client.Ping(ctx, nil)
    if err != nil {
        panic(err)
    }
    fmt.Println("pinged")
}

我尝试了以下方法,但都不起作用:

  • 使用 url.QueryEscape 编码用户名和密码
  • 尝试使用“localhost”而不是“127.0.0.1”
  • 删除 uri 中的“authMechanism=SCRAM-SHA-256”

顺便提一下,使用完全相同的 uri 连接到 Mongo shell,并且成功了。

1 个答案:

答案 0 :(得分:1)

ssl=false 添加到您的 uri。为我工作

相关问题