Exemplo n.º 1
0
        public void Authentication_succeeds_when_user_has_multiple_credentials_and_mechanism_is_not_specified(
            [Values(false, true)] bool async)
        {
            RequireServer.Check().Supports(Feature.ScramSha256Authentication).Authentication(true);
            var client    = DriverTestConfiguration.Client;
            var source1   = "nyc-matrix";
            var userName1 = $"ThomasAnderson{Guid.NewGuid()}";
            var password1 = "WhatIsTheMatrix";
            var source2   = "admin";
            var userName2 = $"Neo{Guid.NewGuid()}";
            var password2 = "TrinityAndZionForever";

            CreateDatabaseUser(client, source1, userName1, password1, role: "read", mechanisms: "SCRAM-SHA-256");
            CreateDatabaseUser(client, source2, userName2, password2, role: "root", mechanisms: "SCRAM-SHA-256");
            var settings = client.Settings.Clone();

#pragma warning disable 618
            settings.Credentials = new[]
            {
#pragma warning restore 618
                MongoCredential.FromComponents(mechanism: null, source: source1, username: userName1, password: password1),
                MongoCredential.FromComponents(mechanism: null, source: source2, username: userName2, password: password2)
            };

            AssertAuthenticationSucceeds(settings, async);
        }
Exemplo n.º 2
0
        private DisposableMongoClient CreateMongoClient(
            CollectionNamespace keyVaultNamespace = null,
            BsonDocument schemaMapDocument        = null,
            IReadOnlyDictionary <string, IReadOnlyDictionary <string, object> > kmsProviders = null,
            bool withExternalKeyVault = false,
            Action <ClusterBuilder> clusterConfigurator = null,
            Dictionary <string, object> extraOptions    = null,
            bool bypassAutoEncryption = false)
        {
            var mongoClientSettings = DriverTestConfiguration.GetClientSettings().Clone();

#pragma warning disable 618
            if (BsonDefaults.GuidRepresentationMode == GuidRepresentationMode.V2)
            {
                mongoClientSettings.GuidRepresentation = GuidRepresentation.Unspecified;
            }
#pragma warning restore 618
            mongoClientSettings.ClusterConfigurator = clusterConfigurator;

            if (keyVaultNamespace != null || schemaMapDocument != null || kmsProviders != null || withExternalKeyVault)
            {
                if (extraOptions == null)
                {
                    extraOptions = new Dictionary <string, object>()
                    {
                        { "mongocryptdSpawnPath", Environment.GetEnvironmentVariable("MONGODB_BINARIES") ?? string.Empty }
                    };
                }

                var schemaMap = GetSchemaMapIfNotNull(schemaMapDocument);

                if (kmsProviders == null)
                {
                    kmsProviders = new ReadOnlyDictionary <string, IReadOnlyDictionary <string, object> >(new Dictionary <string, IReadOnlyDictionary <string, object> >());
                }

                var autoEncryptionOptions = new AutoEncryptionOptions(
                    keyVaultNamespace: keyVaultNamespace,
                    kmsProviders: kmsProviders,
                    schemaMap: schemaMap,
                    extraOptions: extraOptions,
                    bypassAutoEncryption: bypassAutoEncryption);

                if (withExternalKeyVault)
                {
                    var externalKeyVaultClientSettings = DriverTestConfiguration.GetClientSettings().Clone();
                    externalKeyVaultClientSettings.Credential = MongoCredential.FromComponents(null, null, "fake-user", "fake-pwd");
                    var externalKeyVaultClient = new MongoClient(externalKeyVaultClientSettings);
                    autoEncryptionOptions = autoEncryptionOptions.With(keyVaultClient: externalKeyVaultClient);
                }
                mongoClientSettings.AutoEncryptionOptions = autoEncryptionOptions;
            }

            return(new DisposableMongoClient(new MongoClient(mongoClientSettings)));
        }
        public void Authentication_fails_when_user_is_non_extant_and_mechanism_is_not_specified()
        {
            RequireServer.Check().Supports(Feature.ScramSha256Authentication).Authentication(true);
            var client   = DriverTestConfiguration.Client;
            var userName = $"cipher{Guid.NewGuid()}";
            var password = "******";
            var settings = client.Settings.Clone();

            settings.Credential = MongoCredential
                                  .FromComponents(mechanism: null, source: null, username: userName, password: password);
            settings.ServerSelectionTimeout = TimeSpan.FromSeconds(5);

            AssertAuthenticationFails(settings);
        }
        public void Authentication_succeeds_when_user_has_both_Scram_Sha_mechanisms_and_mechanism_is_not_specified()
        {
            RequireServer.Check().Supports(Feature.ScramSha256Authentication).Authentication(true);
            var client   = DriverTestConfiguration.Client;
            var userName = $"both{Guid.NewGuid()}";
            var password = "******";

            CreateAdminDatabaseReadWriteUser(client, userName, password, "SCRAM-SHA-256", "SCRAM-SHA-1");
            var settings = client.Settings.Clone();

            settings.Credential = MongoCredential
                                  .FromComponents(mechanism: null, source: null, username: userName, password: password);

            AssertAuthenticationSucceeds(settings);
        }
Exemplo n.º 5
0
        public void Authentication_succeeds_when_user_has_Scram_Sha_256_mechanism_and_mechanism_is_Scram_Sha_256(
            [Values(false, true)] bool async)
        {
            RequireServer.Check().Supports(Feature.ScramSha256Authentication).Authentication(true);
            var client   = DriverTestConfiguration.Client;
            var userName = $"sha256{Guid.NewGuid()}";
            var password = "******";

            CreateAdminDatabaseReadWriteUser(client, userName, password, "SCRAM-SHA-256");
            var settings = client.Settings.Clone();

            settings.Credential = MongoCredential
                                  .FromComponents(mechanism: "SCRAM-SHA-256", source: null, username: userName, password: password);

            AssertAuthenticationSucceeds(settings, async);
        }
        public void Authentication_fails_when_user_has_Scram_Sha_256_mechanism_and_mechanism_is_Scram_Sha_1()
        {
            RequireServer.Check().Supports(Feature.ScramSha256Authentication).Authentication(true);
            var client   = DriverTestConfiguration.Client;
            var userName = $"sha256{Guid.NewGuid()}";
            var password = "******";

            CreateAdminDatabaseReadWriteUser(client, userName, password, "SCRAM-SHA-256");
            var settings = client.Settings.Clone();

            settings.Credential = MongoCredential
                                  .FromComponents(mechanism: "SCRAM-SHA-1", source: null, username: userName, password: password);
            settings.ServerSelectionTimeout = TimeSpan.FromSeconds(5);

            AssertAuthenticationFails(settings);
        }
Exemplo n.º 7
0
        public void Authentication_succeeds_when_user_has_Scram_Sha_1_Mechanism_and_mechanism_is_not_specified(
            [Values(false, true)] bool async)
        {
            RequireServer.Check().Supports(Feature.ScramSha256Authentication).Authentication(true);
            // mechanisms field in createUser command requires server >=4.0
            var client = DriverTestConfiguration.Client;

            var userName = $"sha1{Guid.NewGuid()}";
            var password = "******";

            CreateAdminDatabaseReadWriteUser(client, userName, password, "SCRAM-SHA-1");
            var settings = client.Settings.Clone();

            settings.Credential = MongoCredential
                                  .FromComponents(mechanism: null, source: null, username: userName, password: password);

            AssertAuthenticationSucceeds(settings, async, speculativeAuthenticatationShouldSucceedIfPossible: false);
        }
        public void Driver_should_connect_to_AtlasDataLake_with_SCRAM_SHA_256()
        {
            RequireEnvironment.Check().EnvironmentVariable("ATLAS_DATA_LAKE_TESTS_ENABLED");
            RequireServer.Check().Supports(Feature.ScramSha256Authentication);

            var connectionString = CoreTestConfiguration.ConnectionString;
            var username         = connectionString.Username;
            var password         = connectionString.Password;
            var source           = connectionString.AuthSource;

            var settings = DriverTestConfiguration.Client.Settings.Clone();

            settings.Credential = MongoCredential.FromComponents(mechanism: "SCRAM-SHA-256", source, username, password);

            using (var client = DriverTestConfiguration.CreateDisposableClient(settings))
            {
                client.GetDatabase("admin").RunCommand <BsonDocument>(new BsonDocument("ping", 1));
            }
        }
        [InlineData("IX", "IX", "\u2168", "\u2163")] // "IX", "IX", Roman numeral nine, Roman numeral four
        public void Authentication_succeeds_with_Unicode_username_and_Unicode_password_when_SaslPrep_equivalent_username_exists(
            string asciiUsername,
            string asciiPassword,
            string unicodeUsername,
            string unicodePassword)
        {
            RequireServer.Check().Supports(Feature.ScramSha256Authentication).Authentication(true);
            var client = DriverTestConfiguration.Client;
            var uniqueAsciiUserName   = $"{asciiUsername}{Guid.NewGuid()}";
            var uniqueUnicodeUserName = $"{unicodeUsername}{Guid.NewGuid()}";

            CreateAdminDatabaseUser(client, uniqueAsciiUserName, asciiPassword, "root", "SCRAM-SHA-256");
            CreateAdminDatabaseUser(client, uniqueUnicodeUserName, unicodePassword, "root", "SCRAM-SHA-256");
            var settings = client.Settings.Clone();

            settings.Credential = MongoCredential.FromComponents(
                mechanism: "SCRAM-SHA-256", source: null, username: uniqueUnicodeUserName, password: unicodePassword);

            AssertAuthenticationSucceeds(settings);
        }
Exemplo n.º 10
0
        public void Execute_should_return_the_expected_result_when_AuthorizedDatabases_is_used(
            [Values(null, false, true)] bool?authorizedDatabases)
        {
            RequireServer.Check().Supports(Feature.ListDatabasesAuthorizedDatabases).Authentication(true);

            var setupClient = DriverTestConfiguration.Client;

            CreateListDatabasesRole(setupClient, _roleName);
            CreateListDatabasesUser(setupClient, _userName, _password, _databaseName, _roleName);
            setupClient.GetDatabase(_databaseName).GetCollection <BsonDocument>("test").InsertOne(new BsonDocument());

            var settings = DriverTestConfiguration.Client.Settings.Clone();

            settings.Credential = MongoCredential.FromComponents(mechanism: null, source: null, username: _userName, password: _password);
            var testClient = new MongoClient(settings);

            var options = new ListDatabasesOptions
            {
                AuthorizedDatabases = authorizedDatabases,
                NameOnly            = true,
            };
            var result = testClient.ListDatabases(options).ToList();

            if (authorizedDatabases.HasValue && authorizedDatabases.Value)
            {
                result.Should().BeEquivalentTo(new BsonArray {
                    new BsonDocument {
                        { "name", _databaseName }
                    }
                });
            }
            else
            {
                result.Count.Should().BeGreaterThan(1);
            }
        }