企业身份验证机制
Overview
在本指南中,您可以了解如何使用仅在 MongoDB Enterprise 版中提供的身份验证机制对 MongoDB 进行身份验证。 身份验证机制是驱动程序和服务器在连接之前确认客户端身份以确保安全的过程。
您可以在最新版本的 MongoDB Enterprise Edition 中使用以下身份验证机制。
要使用其他机制进行身份验证,请参阅身份验证机制基础知识页面。 有关与MongoDB 集群建立连接的更多信息,请参阅连接指南。
您可以使用以下任一方法在连接到 MongoDB 时指定身份验证机制和凭证:
连接字符串,也称为连接 URI,它是一个指示驱动程序如何连接到 MongoDB 部署以及连接时如何表现的字符串。
支持的身份验证机制的工厂方法,包含在
MongoCredential
类中。
使用 GSSAPI/Kerberos 进行身份验证
通用安全服务 API (GSSAPI) 身份验证机制允许用户使用用户的主体名称对 Kerberos 服务进行身份验证。
以下示例使用以下占位符指定身份验证机制:
<username>
:您的 URL 编码 主体名称;例如 "username%40 REALM.ME"<password>
:Kerberos 用户的密码<hostname>
:您的 MongoDB Server 的网络地址,可由客户端访问
选择 Connection String或MongoCredential标签页,查看用于指定 GSSAPI/Kerberos 身份验证机制的相应语法:
var mongoClient = new MongoClient("mongodb://<username>:<password>@<hostname>/?authMechanism=GSSAPI");
var credential = MongoCredential.CreateGssapiCredential("<username>", "<password>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
提示
省略密码
如果满足以下任一条件,则可以省略密码:
在 Windows 上,运行应用程序的进程所有者与需要身份验证的用户相同。
在 Linux 上,用户已通过
kinit username@REALM.COM
初始化其密钥表。
additionalProperties
您可以使用连接字符串或MongoCredential
类中的工厂方法通过身份验证机制指定其他属性。
完全限定域名
以下示例显示如何使用 DNS 服务器检索主机的完全限定域名:
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=CANONICALIZE_HOSTNAME:true");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_passwordpassword>"); credential = credential.WithMechanismProperty("CANONICALIZE_HOST_NAME", "true"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
Realm
以下示例展示了当用户的 Realm 与服务的 Realm 不同时如何指定该 Realm:
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_REALM:<user's realm>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>"); credential = credential.WithMechanismProperty("SERVICE_REALM", "<user's realm>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
服务名称
以下示例展示了当服务名称不是默认的 mongodb
时,如何指定服务名称:
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:<service name>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>"); credential = credential.WithMechanismProperty("SERVICE_NAME", "<service name>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
多个属性
以下示例显示如何指定多个身份验证机制属性:
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:<service name>,SERVICE_REALM:<user's realm>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>"); credential = credential.WithMechanismProperty("SERVICE_REALM", "<user's realm>") .WithMechanismProperty("SERVICE_NAME", "<service name>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
使用 LDAP (PLAIN) 进行身份验证
您可以使用目录服务器用户名和密码向轻量级目录访问协议 (LDAP) 服务器进行身份验证。
以下示例使用以下占位符指定身份验证机制:
<username>
:您的 LDAP 用户名<password>
:您的 LDAP 密码<hostname>
:您的 MongoDB Server 的网络地址,可由客户端访问<authenticationDb>
:包含用户的身份验证数据的 MongoDB 数据库
选择Connection String或MongoCredential标签页,查看指定 LDAP 身份验证机制的相应语法:
var mongoClient = new MongoClient("mongodb://<username>:<password>@<hostname>/?authSource=<authenticationDb>&authMechanism=PLAIN");
var credential = MongoCredential.CreatePlainCredential("<authenticationDb>", "<username>", "<password>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
提示
该方法为 PLAIN 而不是 LDAP,因为它使用 RFC-4616 定义的 PLAIN 简单身份验证和安全层 (SASL) 进行身份验证。
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: