OIDC(Workload Identity Federation)
개요
OIDC(OpenID Connect) 인증 메커니즘 을 사용하면 Azure 또는 Google Cloud Platform (GCP )과 같은 타사 ID 제공자 를 사용하여 MongoDB 에 인증할 수 있습니다.
이 메커니즘은 MongoDB Atlas 또는 MongoDB Enterprise Advanced 에 인증할 때 그리고 MongoDB v7.0 이상에 인증할 때만 사용할 수 있습니다.
팁
OIDC 인증
OIDC 인증 을 위한 MongoDB Atlas 구성에 학습 보려면 Atlas 설명서에서OIDC를 사용한 Workforce Identity Federation 설정을 참조하세요.
MongoDB 에서 OIDC 인증 을 사용하는 방법에 대한 자세한 내용은 MongoDB Server 매뉴얼에서 OpenID Connect 인증 및 MongoDB Server 매개변수를 참조하세요.
코드 자리 표시자
이 페이지의 코드 예제에서는 다음 자리 표시자를 사용합니다.
+srv
: MongoDB Atlas cluster 에 연결하는 경우에만 연결 문자열 접두사에 이 옵션을 포함합니다.+srv
옵션에 학습 보려면 MongoDB Server 매뉴얼의 연결 문자열 형식을 참조하세요.<username>
: Azure IMDS에 대해 인증하는 경우 Azure managed ID 또는 엔터프라이즈 애플리케이션 의 클라이언트 ID 또는 애플리케이션 ID 입니다.<hostname>
: MongoDB deployment 의 네트워크 주소 입니다.<port>
: MongoDB deployment 서버의 포트 번호입니다. 이 매개 변수를 생략하면 운전자 는 기본값 포트 번호(27017
)를 사용합니다. MongoDB Atlas cluster 에 연결할 때는 포트를 지정할 필요가 없습니다.<audience>
: MongoDB deployment 에 구성된 대상 매개변수입니다.
이 페이지의 코드 예제를 사용하려면 이러한 자리 표시자를 원하는 값으로 바꾸세요.
애플리케이션에서 OIDC 인증 사용
다음 섹션에서는 OIDC 인증 을 사용하여 다양한 플랫폼에서 인증하는 방법을 설명합니다.
Azure IMDS
애플리케이션 이 Azure VM에서 실행되거나 Azure 인스턴스 메타데이터 서비스(IMDS)를 사용하는 경우, .NET/ C# 드라이버의 내장 Azure 지원 을 사용하여 MongoDB 에 인증할 수 있습니다.
MongoCredential
객체 를 사용하거나 연결 문자열 의 일부로 MongoClientSettings
객체 에 Azure IMDS OIDC 인증 을 지정할 수 있습니다. Connection String 또는 MongoCredential 탭 을 선택하여 해당 구문을 확인합니다.
참고
쉼표(,
) 문자가 포함된 값을 authMechanismProperties
연결 문자열 매개 변수에 전달할 수 없습니다. MongoCredential 탭 에 표시된 대로 MongoCredential
객체 에 쉼표가 포함된 값을 지정해야 합니다.
다음 코드 예시 에서는 Azure IMDS OIDC 인증 을 지정하는 방법을 보여줍니다. <percent-encoded audience>
자리 표시자를 MongoDB deployment 에 구성된 audience
매개변수의 퍼센트 인코딩된 값으로 바꿉니다.
var connectionString = "mongodb://<username>@<hostname>[:<port>]/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>"); var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var client = new MongoClient(mongoClientSettings);
다음 코드 예시 에서는 Azure IMDS OIDC 인증 을 지정하는 방법을 보여줍니다.
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential .CreateOidcCredential("azure", "<username>") .WithMechanismProperty("TOKEN_RESOURCE", "<audience>"); var client = new MongoClient(mongoClientSettings);
GCP IMDS
애플리케이션 이 Google Compute Engine VM에서 실행되거나 GCP 인스턴스 메타데이터 서비스 를 사용하는 경우 , .NET/ C# 드라이버의 내장 GCP 지원 을 사용하여 MongoDB 에 인증할 수 있습니다.
GCP MongoClientSettings
객체 MongoCredential
를 사용하거나 연결 의 string 일부로 객체 에 IMDS OIDC 인증 을 지정할 수 있습니다. Connection String 또는 MongoCredential 탭 을 선택하여 해당 구문을 확인합니다.
참고
쉼표(,
) 문자가 포함된 값을 authMechanismProperties
연결 문자열 매개 변수에 전달할 수 없습니다. MongoCredential 탭 에 표시된 대로 MongoCredential
객체 에 쉼표가 포함된 값을 지정해야 합니다.
다음 코드 예시 에서는 GCP IMDS OIDC 인증 을 인증 문자열의 일부로 지정하는 방법을 보여줍니다.
var connectionString = "mongodb://<hostname>[:<port>]/?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>"); var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var client = new MongoClient(mongoClientSettings);
다음 코드 예시 에서는 MongoCredential
객체 를 사용하여 GCP IMDS OIDC 인증 을 지정하는 방법을 보여 줍니다.
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential .CreateOidcCredential("gcp") .WithMechanismProperty("TOKEN_RESOURCE", "<audience>"); var client = new MongoClient(mongoClientSettings);
사용자 지정 콜백
.NET/ C# 드라이버 는 Azure Functions 및 AKS( Azure Kubernetes Service)를 포함한 모든 플랫폼에 대한 내장 지원 을 제공하지 않습니다. 대신 OIDC를 사용하여 이러한 플랫폼에서 인증하려면 사용자 지정 콜백 을 정의해야 합니다.
먼저 IOidcCallback
인터페이스를 구현하는 클래스를 정의합니다. 이 인터페이스에는 두 가지 메서드가 포함되어 있습니다.
GetOidcAccessToken()
: 이 메서드는 콜백 메서드에 대한 매개변수를 허용하고 콜백 응답을 반환합니다.GetOidcAccessTokenAsync()
: 이 메서드는 이전 메서드의 비동기 버전입니다.
다음 코드는 IOidcCallback
인터페이스의 구현 예시입니다. 이 예시에서 메서드는 로컬 파일 시스템의 "access-token.dat"
파일에서 OIDC 토큰을 조회합니다.
public class MyCallback : IOidcCallback { public OidcAccessToken GetOidcAccessToken( OidcCallbackParameters parameters, CancellationToken cancellationToken) { var accessToken = File.ReadAllText("access-token.dat"); return new(accessToken, expiresIn: null); } public async Task<OidcAccessToken> GetOidcAccessTokenAsync( OidcCallbackParameters parameters, CancellationToken cancellationToken) { var accessToken = await File.ReadAllTextAsync( "access-token.dat", cancellationToken) .ConfigureAwait(false); return new(accessToken, expiresIn: null); } }
사용자 지정 콜백 메서드가 포함된 클래스를 정의한 후 MongoCredential.CreateOidcCredential()
메서드를 호출하고 클래스의 새 인스턴스 를 전달합니다. 다음 코드 예시 와 같이 이 메서드 호출의 결과를 MongoClientSettings
객체 의 Credential
속성 에 저장합니다.
var mongoClientSettings = MongoClientSettings .FromConnectionString("mongodb://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new MyCallback()); var client = new MongoClient(mongoClientSettings);
API 문서
이 페이지에서 설명하는 메서드 또는 유형에 학습 보려면 다음 API 설명서를 참조하세요.