在本指南中,您可以找到使用MongoDB Enterprise版中提供的每种身份验证机制连接到MongoDB的示例代码:  Kerberos (GSSAPI/SSPI) 、 LDAP (PLAIN)和MONGODB-OIDC 。
Kerberos (GSSAPI/SSPI)
注意
Node.js 驱动程序在 UNIX 上使用 MIT Kerberos 库支持 Kerberos,在 Windows 上使用 SSPI API 支持 Kerberos。
GSSAPI身份验证机制使用您的用户主体对 Kerberos 服务进行身份验证。
您可以在 连接string上指定选项时执行以下操作,以指定此身份验证机制:
- 将 - authMechanism参数设置为- GSSAPI。
- 如果使用 - mongodb以外的值,请在- authMechanismProperties参数中设置- SERVICE_NAME值。
- 如果需要自定义服务域,请在 - authMechanismProperties参数中指定- SERVICE_REALM值。
- 如果需要对主机名进行规范化,请在 - authMechanismProperties参数中指定- CANONICALIZE_HOST_NAME值。 此属性可以采用以下值:- none:(默认)不执行主机名规范化
- forward:执行正向 DNS 查找以规范化主机名
- forwardAndReverse:执行正向 DNS 查找,然后对该值执行反向查找以规范化主机名
 
重要
gssapiServiceName参数已弃用,可能会在驱动程序的未来版本中删除。 请在连接 URI 中使用authMechanismProperties=SERVICE_NAME:<your service name> 。 有关更多信息,请参阅authMechanismProperties参数文档。
以下代码示例使用GSSAPI对 Kerberos for UNIX 进行身份验证。
重要
始终使用encodeURIComponent方法对主体进行URI 编码,以确保对其进行正确解析。
const { MongoClient } = require("mongodb"); // specify the placeholder values for your environment in the following lines const clusterUrl = "<MongoDB cluster URL>"; const principal = encodeURIComponent("<Kerberos principal and realm>"); const serviceRealm = "<Kerberos service realm>"; const canonicalizationSetting = "<canonicalization setting>"; const authMechanismProperties = `SERVICE_REALM:${serviceRealm},CANONICALIZE_HOST_NAME:${canonicalizationSetting}`; const authMechanism = "GSSAPI"; // Connection URI const uri = `mongodb+srv://${principal}@${clusterUrl}/?authMechanism=${authMechanism}&authMechanismProperties=${authMechanismProperties}`; const client = new MongoClient(uri); // Function to connect to the server async function run() {   try {     // Establish and verify connection     await client.db("admin").command({ ping: 1 });     console.log("Connected successfully to server");   } finally {     // Ensures that the client will close when you finish/error     await client.close();   } } run().catch(console.dir); 
注意
该方法引用 GSSAPI身份验证机制而不是 Kerberos,因为驾驶员通过GSSAPI RFC-4652(SASL 机制)进行身份验证。
LDAP (Plain)
PLAIN身份验证机制使用您的用户名和密码对轻量级目录访问协议 (LDAP) 服务器进行身份验证。
您可以通过将authMechanism 参数设置为PLAIN 并在LDAP 连接string 中包含 用户名和密码来指定此身份验证机制,如以下示例代码所示。
const { MongoClient } = require("mongodb"); // specify the placeholder values for your environment in the following lines const clusterUrl = "<MongoDB cluster URL>"; const ldapUsername = "<LDAP username>"; const ldapPassword = "<LDAP password>"; const authMechanism = "PLAIN"; // Connection URI const uri = `mongodb+srv://${ldapUsername}:${ldapPassword}@${clusterUrl}/?authMechanism=${authMechanism}`; const client = new MongoClient(uri); // Function to connect to the server async function run() {   try {     // Establish and verify connection     await client.db("admin").command({ ping: 1 });     console.log("Connected successfully to server");   } finally {     // Ensures that the client will close when you finish/error     await client.close();   } } run().catch(console.dir); 
注意
该身份验证机制名为 PLAIN 而不是 LDAP,因为它使用 RFC-4616 中定义的 PLAIN 简单身份验证和安全层 (SASL) 进行身份验证。
MONGODB-OIDC
重要
MONGODB-OIDC 身份验证机制要求在 Linux 平台上运行 MongoDB Server v 7.0或更高版本。
以下部分介绍如何使用 MONGODB-OIDC身份验证机制从各种平台进行身份验证。
有关 MONGODB-OIDC 身份验证机制的更多信息,请参阅 MongoDB Server 手册中的OpenID Connect 身份验证和MongoDB Server 参数。
Azure IMDS
如果应用程序在 Azure VM 上运行,或以其他方式使用 Azure 实例元数据服务 (IMDS),则可以使用 Node.js 驱动程序的内置 Azure 支持对 MongoDB 进行身份验证。
要将Azure IMDS OIDC 指定为身份验证机制,请在连接string中设立以下选项:
- username:如果使用的是Azure托管标识,设立为托管标识的客户端ID 。否则,忽略此选项。
- authMechanism:设置为- MONGODB-OIDC。
- authMechanismProperties:设置为- ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>。 将- <audience>占位符替换为MongoDB 部署上配置的- audience参数的值。
以下代码示例展示了如何设立上述连接选项:
const { MongoClient } = require("mongodb"); const uri = "mongodb+srv://<username>@<hostname>:<port>/?authMechanism=MONGODB-OIDC"             + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>"; const client = new MongoClient(uri); 
GCP IMDS
如果您的应用程序在 Google Compute Engine 虚拟机上运行,或以其他方式使用GCP实例元数据服务,则可以使用 Node.js 驱动程序的内置GCP支持向MongoDB进行身份验证。
要将GCP IMDS OIDC 指定为身份验证机制,请在连接string中设立以下选项:
- authMechanism:设置为- MONGODB-OIDC。
- authMechanismProperties:设置为- ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>。 将- <audience>占位符替换为MongoDB 部署上配置的- audience参数的值。
以下代码示例展示了如何设立上述连接选项:
const { MongoClient } = require("mongodb"); const uri = "mongodb+srv://<host>:<port>/?authMechanism=MONGODB-OIDC"             + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>"; const client = new MongoClient(uri); 
Kubernetes
如果应用程序在Kubernetes集群上运行,则可以使用 Node.js 驱动程序的内置Kubernetes支持向MongoDB进行身份验证。
要将Kubernetes OIDC 指定为身份验证机制,请在连接字符串中设立以下选项:
- authMechanism:设置为- MONGODB-OIDC。
- authMechanismProperties:设置为- ENVIRONMENT:k8s。
以下代码示例展示了如何设立上述连接选项:
import { MongoClient } from "mongodb"; const uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-OIDC"             + "&authMechanismProperties=ENVIRONMENT:k8s"; const client = new MongoClient(uri); 
自定义回调
Node.js驾驶员并不为所有平台(包括Azure Functions)提供内置支持。 相反,您必须定义自定义回调,才能使用 OIDC 从这些平台进行身份验证。
首先,定义一个函数,用于检索用于 OIDC身份验证的访问权限令牌。 此函数必须具有以下签名:
const myCallback = (params: OIDCCallbackParams): Promise<OIDCResponse> => { } 
OIDCCallbackParams参数包含以下属性,您可以在函数内访问权限这些属性:
| 属性 | 值 | 
|---|---|
| 
 | 在30秒后中止身份验证工作流程的 | 
| 
 | 当前 OIDC API版本 | 
| 
 | 从服务器返回的身份提供程序信息 | 
| 
 | 连接string中包含的用户名(如果有) | 
| 
 | 刷新令牌,用于向颁发者请求新的访问权限令牌(如果有) | 
回调函数必须返回一个OIDCResponse对象。 该对象包含以下属性:
| 属性 | 值 | 
|---|---|
| 
 | 用于身份验证的访问权限令牌。 | 
| 
 | 可选。 访问权限令牌过期之前的秒数。 | 
| 
 | 可选。 用于向颁发者请求新访问权限令牌的刷新令牌。 | 
以下示例显示了从本地文件系统中名为access-token.dat的文件中检索 OIDC访问权限令牌的回调函数:
const fs = require("node:fs"); const myCallback = (params: OIDCCallbackParams): Promise<OIDCResponse> => {   const token = fs.readFileSync("access-token.dat", "utf8");   return {     accessToken: token,     expiresInSeconds: 300,     refreshToken: token   }; } 
定义回调函数后,将其作为authMechanismProperties参数的一部分传递给MongoClient构造函数。 Node.js驾驶员支持以下身份验证模式:
- 机器身份验证:由 Web 服务和其他无需人工交互的应用程序使用。 选择 Machine Callback标签页查看此语法的示例。 
- 人工身份验证:由数据库工具、命令行实用程序和其他涉及直接人工交互的应用程序使用。 选择Human Callback标签页查看此语法的示例。 
对于机器身份验证,请将回调函数分配给authMechanismProperties.OIDC_CALLBACK属性,如以下示例所示:
const { MongoClient } = require("mongodb"); const uri = "mongodb+srv://<host>:<port>/?authMechanism=MONGODB-OIDC"; const client = new MongoClient(uri, {   authMechanismProperties: {     OIDC_CALLBACK: myCallback   } }); 
对于人工身份验证,请将回调函数分配给authMechanismProperties.OIDC_HUMAN_CALLBACK属性,如以下示例所示:
const { MongoClient } = require("mongodb"); const uri = "mongodb+srv://<host>:<port>/?authMechanism=MONGODB-OIDC"; const client = new MongoClient(uri, {   authMechanismProperties: {     OIDC_HUMAN_CALLBACK: myCallback   } }); 
API 文档
要进一步了解本指南所讨论的方法和类型,请参阅以下 API 文档: