Docs 菜单
Docs 主页
/ / /
Node.js 驱动程序
/ /

OIDC 身份验证机制

OpenID Connect (OIDC)身份验证机制允许您使用第三方身份提供商(例如Azure或Google Cloud Platform (GCP ))向MongoDB进行身份验证。

MONGODB-OIDC身份验证机制要求在Linux平台上运行MongoDB Server v7.0 或更高版本。只有在向MongoDB Atlas或MongoDB Enterprise Advanced进行身份验证时,才能使用此机制。

提示

了解有关 OIDC 身份验证的更多信息

要学习;了解有关为 OIDC身份验证配置MongoDB Atlas 的更多信息,请参阅Atlas文档中的 使用 OIDC 设置 Workforce Identity Federation。

要学习;了解有关在MongoDB中使用 OIDC身份验证的更多信息,请参阅MongoDB Server手册中的使用 OIDC/OAuth 2.0oidcIdentityProviders 进行身份验证和授权。

以下部分介绍如何使用 MONGODB-OIDC身份验证机制从各种平台进行身份验证。

如果应用程序在 Azure VM 上运行,或以其他方式使用 Azure 实例元数据服务 (IMDS),则可以使用 Node.js 驱动程序的内置 Azure 支持对 MongoDB 进行身份验证。

要将Azure IMDS OIDC 指定为身份验证机制,请在连接string中设立以下选项:

  • username:如果使用的是Azure托管标识,请将其设立为托管标识的客户端ID 。 如果使用服务主体代表企业应用程序,请将其设立为服务主体的应用程序 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);

如果您的应用程序在 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集群上运行,则可以使用 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参数包含以下属性,您可以在函数内访问权限这些属性:

属性

timeoutContext

在30秒后中止身份验证工作流程的AbortSignal

version

当前 OIDC API版本

idpInfo

从服务器返回的身份提供程序信息

username

连接string中包含的用户名(如果有)

refreshToken

刷新令牌,用于向颁发者请求新的访问权限令牌(如果有)

回调函数必须返回一个OIDCResponse对象。 该对象包含以下属性:

属性

accessToken

用于身份验证的访问权限令牌。

expiresInSeconds

可选。 访问权限令牌过期之前的秒数。

refreshToken

可选。 用于向颁发者请求新访问权限令牌的刷新令牌。

以下示例显示了从本地文件系统中名为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 文档:

后退

AWS IAM

在此页面上