#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 и просто храню его локально для сеанса, а монго просто видит его как локального поставщика. Но я надеялся, что удаленное дешифрование будет работать. У меня есть пост на форумах монго, поэтому я обновлю этот вопрос, если получу ответ.