Docs 主页 → 开发应用程序 → Python 驱动程序 → pymongo
企业身份验证机制
Overview
MongoDB Enterprise Edition 包含MongoDB Community Edition中不提供的身份验证机制。 在本指南中,您可以学习;了解如何使用这些身份验证机制对MongoDB进行身份验证。 要学习;了解MongoDB中提供的其他身份验证机制,请参阅身份验证机制。
Kerberos
通用安全服务 API (GSSAPI) 提供了用于 Kerberos 身份验证的接口。 选择与您的操作系统对应的标签页,了解如何使用 Kerberos 进行身份验证。
PLAIN SASL
PLAIN 简单身份验证和安全层 (SASL),由 RFC4616 定义 是一种用户名-密码身份验证机制,通常与 TLS 或其他加密层一起使用。
重要
PLAIN SASL 是一种明文身份验证机制。 在使用 PLAIN SASL 对 MongoDB 进行身份验证时,强烈建议您将 TLS/SSL 与证书验证结合使用。
要详细了解如何为连接启用 TLS,请参阅配置传输层安全性 (TLS)。
要使用 SASL 进行身份验证,请将 authMechanism
连接选项设置为PLAIN
。 您可以通过两种方式设置此选项:将参数传递给 MongoClient
构造函数,或通过连接string中的参数。
MONGODB-OIDC
重要
MONGODB-OIDC 身份验证机制需要运行在 Linux 平台上的 MongoDB v 7.0 或更高版本。
PyMongo 支持对工作负载身份进行 OIDC 身份验证。 工作负载身份是分配给软件工作负载(例如应用程序、服务、脚本或容器)的身份,用于验证和访问其他服务和资源。
以下部分介绍如何使用 MONGODB-OIDC 身份验证机制对各种平台进行身份验证。
有关 MONGODB-OIDC 身份验证机制的更多信息,请参阅 MongoDB Server 手册中的OpenID Connect 身份验证。
Azure IMDS
如果应用程序在 Azure VM 上运行,或以其他方式使用 Azure 实例元数据服务 (IMDS),您可以使用 PyMongo 的内置 Azure 支持对 MongoDB 进行身份验证。
您可以通过两种方式为Azure IMDS 配置 OIDC:将参数传递给 MongoClient
构造函数,或通过连接string中的参数。
提示
如果应用程序在 Azure VM 上运行,并且只有一个托管标识与该 VM 关联,则可以省略username
连接选项。
GCP IMDS
如果您的应用程序在 GCP 虚拟机上运行,或以其他方式使用 GCP 实例元数据服务 ,您可以使用 PyMongo 的内置 GCP 支持对 MongoDB 进行身份验证。
您可以通过两种方式为GCP IMDS 配置 OIDC:将参数传递给 MongoClient
构造函数,或通过连接string中的参数。
其他 Azure 环境
如果应用程序在 Azure Functions、App Service 环境 (ASE) 或 Azure Kubernetes 服务 (AKS) 上运行,则可以使用 azure-identity 包以获取身份验证档案。
首先,使用 pip 安装azure-identity
库,如以下示例所示:
python3 -m pip install azure-identity
接下来,定义一个从OIDCCallback
类继承的类。 此类必须实现fetch()
方法,该方法以OIDCCallbackResult
对象的形式返回 OIDC 令牌。
以下示例演示如何定义名为MyCallback
的回调类。 此类包括一个fetch()
方法,该方法从标准服务帐户令牌文件位置的文件中检索 OIDC 令牌。
audience = "<audience configured on the MongoDB deployment>" client_id = "<Azure client ID>" class MyCallback(OIDCCallback): def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult: credential = DefaultAzureCredential(managed_identity_client_id=client_id) token = credential.get_token(f"{audience}/.default").token return OIDCCallbackResult(access_token=token)
定义回调类后,创建一个 Python 字典,其中包含一个键"OIDC_CALLBACK"
,其值是自定义回调类的一个实例:
properties = {"OIDC_CALLBACK": MyCallback()}
最后,通过向MongoClient
构造函数传递参数来设置以下连接选项:
authMechanism
:设置为"MONGODB-OIDC"
。authMechanismProperties
:设置为您在上一步中创建的properties
字典。
from pymongo import MongoClient from azure.identity import DefaultAzureCredential from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult # define callback, properties, and MongoClient audience = "<audience configured on the MongoDB deployment>" client_id = "<Azure client ID>" class MyCallback(OIDCCallback): def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult: credential = DefaultAzureCredential(managed_identity_client_id=client_id) token = credential.get_token(f"{audience}/.default").token return OIDCCallbackResult(access_token=token) properties = {"OIDC_CALLBACK": MyCallback()} client = MongoClient( "mongodb://<hostname>:<port>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
GCP GKE
如果您的应用程序在 GCP Google Kubernetes Engine (GKE) 集群上运行并 配置了服务帐号 ,您可以从标准服务账户令牌文件位置读取 OIDC 令牌。
首先,定义一个从OIDCCallback
类继承的类。 此类必须实现fetch()
方法,该方法以OIDCCallbackResult
对象的形式返回 OIDC 令牌。
以下示例演示如何定义名为MyCallback
的回调类。 此类包括一个fetch()
方法,该方法从标准服务帐户令牌文件位置的文件中检索 OIDC 令牌。
class MyCallback(OIDCCallback): def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult: with open("/var/run/secrets/kubernetes.io/serviceaccount/token") as fid: token = fid.read() return OIDCCallbackResult(access_token=token)
定义回调类后,创建一个 Python 字典,其中包含一个键"OIDC_CALLBACK"
,其值是自定义回调类的一个实例:
properties = {"OIDC_CALLBACK": MyCallback()}
最后,通过向MongoClient
构造函数传递参数来设置以下连接选项:
authMechanism
:设置为"MONGODB-OIDC"
。authMechanismProperties
:设置为您在上一步中创建的properties
字典。
from pymongo import MongoClient from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult # define callback, properties, and MongoClient class MyCallback(OIDCCallback): def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult: with open("/var/run/secrets/kubernetes.io/serviceaccount/token") as fid: token = fid.read() return OIDCCallbackResult(access_token=token) properties = {"OIDC_CALLBACK": MyCallback()} client = MongoClient( "mongodb://<hostname>:<port>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
API 文档
要了解有关结合使用 PyMongo 企业身份验证机制的更多信息,请参阅以下 API 文档: