Как получить доступ к TenantId, ClientID, секретным и т. Д. В dot net core из Azure.Личность?

#mongodb #azure #.net-core #azure-web-app-service #asp.net-identity

Вопрос:

У меня есть веб-приложение dot net core, развернутое в службе приложений Azure, с включенной системой, управляемой идентификацией.

Мне нужно получить доступ к идентификатору арендатора, идентификатору клиента и секрету и т. Д. Из моего кода.., Чтобы я мог передать их в библиотеку 3-й части (шифрование на уровне полей на стороне клиента mongodb с хранилищем ключей).

Есть ли какой-либо способ получить доступ к этим переменным из моего кода при использовании Azure.Библиотека удостоверений личности?

Я могу использовать new DefaultAzureCredential() — но я не знаю, как получить доступ к идентификатору арендатора и т. Д. Из этого объекта, как только он будет создан?

Спасибо!

Обновление — Код библиотеки Mongodb из https://docs.mongodb.com/drivers/security/client-side-field-level-encryption-local-key-to-kms/#specify-the-azure-credentials

 var kmsProviders = new Dictionary<string, IReadOnlyDictionary<string, object>>();

var azureTenantId = Environment.GetEnvironmentVariable("FLE_AZURE_TENANT_ID");
var azureClientId = Environment.GetEnvironmentVariable("FLE_AZURE_CLIENT_ID");
var azureClientSecret = Environment.GetEnvironmentVariable("FLE_AZURE_CLIENT_SECRET");
var azureKmsOptions = new Dictionary<string, object>
{
    { "tenantId", azureTenantId },
    { "clientId", azureClientId },
    { "clientSecret", azureClientSecret },
};

kmsProviders.Add("azure", azureKmsOptions);
 

ОБНОВЛЕНИЕ: Обходной путь с использованием Keyvault для получения главного ключа и локального хранения, чтобы выступать в качестве локального поставщика драйвера Mongo..

// Извлеките главный ключ из Keyvault и добавьте в локальную конфигурацию

   public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((context, config) =>
                {
                  var builtConfig = config.Build();
              
                if (context.HostingEnvironment.IsProduction() amp;amp; builtConfig["SystemConfig:UseKeyVault"] == "true")
                    {
                        Uri kvUri = new(builtConfig["SystemConfig:KeyVaultUri"]);

                        var secretClient = new SecretClient(
                            kvUri,
                            new DefaultAzureCredential());

                        // Add all settings from keyvault to config
                        config.AddAzureKeyVault(secretClient, new KeyVaultSecretManager());

                    }

                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
 

// Ключ доступа и хранение в качестве локального поставщика..

   private static Dictionary<string, IReadOnlyDictionary<string, object>> GetLocalKmsProvider(IOptions<MongoDbConfig> configuration)
        {
            var localMasterKey = Convert.FromBase64String(configuration.Value.MasterKey);
            var localKey = new Dictionary<string, object>
            {
                { "key", localMasterKey }
            };

            var kmsProviders = new Dictionary<string, IReadOnlyDictionary<string, object>>();
            kmsProviders.Add("local", localKey);
            return kmsProviders;
        }
 

Комментарии:

1. в этом и заключается смысл использования управляемой идентификации: у вас нет доступа к учетным данным. чего вы пытаетесь достичь ? зачем вам нужно передавать эти учетные данные?

2. Попытка передать учетные данные в библиотеку 3-й части.. см. docs.mongodb.com/drivers/security/…

3. Значит, ключи хранятся в KV ? не могли бы вы поделиться кодом, который у вас есть до сих пор. вы должны иметь возможность создать экземпляр клиента kv без необходимости указывать учетные данные, но не уверены, разрешает ли это драйвер mongo.

4. Спасибо, приятель. Я попробую на форумах Монго.

5. На самом деле да — это именно то, чем я сейчас занимаюсь.. Я достаю мастер — ключ из KV и просто храню его локально для сеанса, а монго просто видит его как локального поставщика. Но я надеялся, что удаленное дешифрование будет работать. У меня есть пост на форумах монго, поэтому я обновлю этот вопрос, если получу ответ.