У меня есть это веб-приложение, которое обращается к хранилищу ключей, хранящемуся в облаке Azure.
Чтобы получить доступ к этому KeyVault, я использую расширение IConfigurationBuilder.
configuration.AddAzureKeyVault(new Uri(KeyvaultUri), new DefaultAzureCredential(true));
Я создал управляемую идентификацию для всех пользователей, которым нужен доступ к этому, что означает, что они должны иметь возможность запускать приложение и иметь доступ к хранилищу ключей после входа в систему через SSO, что они в настоящее время вынуждены делать каждый раз, когда они запускают приложение из-за new DefaultAzureCredential(true) Я не понимаю, почему его каждый раз нужно запрашивать каждый раз, а не хранить учетные данные где-то после того, как они были введены один раз, и использовать эти сохраненные учетные данные, могу ли я как-то локально хранить необходимые учетные данные после первоначального авторизоваться?
Неудобно всегда входить в систему при запуске своего приложения, а отладка приложения становится немного длинной с требуемым входом в систему.
Можно ли каким-то образом разрешить вход в систему в фоновом режиме или как-то сохранить учетные данные после первого входа в систему?
Я чувствую, что это немного выходит из-под контроля - решение, которое я ищу, должно быть применимо для тех, кто запускает решение через терминал, за пределами визуальной студии. Например, разработчики внешнего интерфейса, которым просто нужен бэкэнд, чтобы делать запросы ни к чему другому.
Вход @SimonMourier через sso не является проблемой, проблема в том, что это требуется каждый раз, когда я запускаю приложение, как заставить его сохранять введенные учетные данные и повторно использовать их в следующий раз, когда приложение настроено на запуск.
@IamnotFat Привет. Не можете ли вы идентифицировать свое приложение вместо того, чтобы использовать привилегии пользователя для доступа к хранилищу ключей? В этом случае приложение будет использовать свои учетные данные для доступа к Key Vault. Поэтому нет запроса на вход в систему. Который будет использовать поток учетных данных клиента в OAuth. Вы можете легко добиться этого с помощью управляемого удостоверения.
Простой ответ: вы «можете». Ничто не мешает вам хранить что-либо локально и читать это. Вопрос в том, если вы хотите хранить локально, то безопасность конфигурации вас не волнует. И если это не проблема, даже не беспокойтесь о Key Vault — просто сохраните все в настройках приложения. то есть с Key Vault вы получаете безопасность учетных данных, чего нет в настройках приложения.
Если я правильно понял ваш вопрос, если намерение предназначено только для целей отладки и при условии, что вы используете Visual Studio в ОС Windows, вам необходимо выбрать учетную запись в разделе Аутентификация службы Azure (Инструменты -> Параметры -> Аутентификация службы Azure). Если пользователь не указан, ему необходимо сначала войти в систему, используя учетную запись, которую вы авторизовали в хранилище ключей.
Зачем использовать KV, если вы можете хранить то же самое локально? KV предназначен для обеспечения безопасности конфиденциальной информации. Если вы храните его локально, KV бесполезен. Опять же, разве вы не можете просто использовать учетные данные приложения вместо индивидуальных учетных данных?
Я чувствую, что это немного выходит из-под контроля ..





Можете ли вы поделиться небольшим полным примером кода?
Как насчет использования DefaultAzureCredentialOptions.
Нравиться:
.ConfigureAppConfiguration((context, config) =>
{
var appSettings = config.Build();
var credentialOptions = new DefaultAzureCredentialOptions();
var credential = new DefaultAzureCredential(credentialOptions);
config.AddAzureKeyVault(new Uri(appSettings["Url:KeyVault"]), credential);
})
Я не уверен, какие примеры кода вы запрашиваете. Я спрашиваю, можно ли сохранить учетные данные после первоначального входа в систему, чтобы разработчику не приходилось повторно вводить свои учетные данные каждый раз, когда они запускают приложение.
DefaultAzureCredential поддерживает возможность настройки локального кэша, или вы можете использовать специальный оператор #if, который, если вы выполняете локальную разработку, вы получаете учетные данные из локального файла/сертификата/и т. д. Спрашивал о примере представления, потому что тогда было бы быстрее предоставить ответ. learn.microsoft.com/en-us/dotnet/api/…
Нет смысла кэшировать токен, так как он используется только один раз при запуске, то, что вы ищете, это исключить из ваших учетных данных все неправильные способы, которыми вы пытаетесь получить токен для подключения к вашему AKV, кроме того, который вы действительно используете. с использованием.
Чтобы настроить его правильно и не ждать 15 секунд при запуске, вы должны настроить DefaultAzureCredentials следующим образом:
DefaultAzureCredential credentials = new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
ExcludeEnvironmentCredential = true,
ExcludeInteractiveBrowserCredential = true,
ExcludeAzurePowerShellCredential = true,
ExcludeSharedTokenCacheCredential = true,
ExcludeVisualStudioCodeCredential = true,
ExcludeVisualStudioCredential = true,
ExcludeAzureCliCredential = true,
ExcludeManagedIdentityCredential = false,
});
Исключите все возможности для захвата токена, кроме того, который вы используете, в этом случае «Управляемое удостоверение» или в других случаях AzureCliCredentials.
С уважением.
Я предполагаю, что у вас есть разные подписки Azure для непроизводственного и производственного (которые содержат экземпляры хранилища ключей непроизводственного и рабочего).
В нерабочем экземпляре хранилища ключей создайте новое назначение ролей с необходимыми участниками, т. е. учетными записями AAD разработчика.
Если вы используете DefaultAzureCredential, эти участники смогут использовать проверку подлинности службы Azure в Visual Studio или Visual Studio Code (или EnvironmentCredential), поскольку DefaultAzureCredential будет циклически переключаться между этими различными типами учетных данных, включая VisualStudioCredential и VisualStudioCodeCredential (и EnvironmentCredential) соответственно.
Разработчики могут пройти аутентификацию в своей среде IDE, например. в Visual Studio, перейдя в Tools > Options > Azure Service Authentication, где они могут пройти аутентификацию, используя свои учетные данные Azure.
Предполагая, что их учетным записям AAD был предоставлен доступ к (непроизводственному) экземпляру хранилища ключей, они смогут получить доступ.
Развернутое приложение, предположительно работающее в Azure, будет использовать другой тип учетных данных, например. ManagedIdentityCredential или EnvironmentCredential. Учитывая, что они также обрабатываются DefaultAzureCredential, никаких изменений кода не требуется, чтобы это работало для развернутого экземпляра вашего приложения.
Единственная разница с экземпляром хранилища ключей prod заключается в том, что вы, вероятно, не будете создавать назначения ролей для учетных записей разработчиков.
решение, которое я ищу, должно быть применимо для тех, кто запускает решение через терминал, за пределами визуальной студии. Например, разработчики внешнего интерфейса, которым просто нужен бэкэнд, чтобы делать запросы ни к чему другому.
Для этого типа пользователей, которые просто хотят запустить приложение из терминала, они могут установить некоторые переменные среды, которые будут выбраны EnvironmentCredential (это еще один из типов учетных данных, включенных в DefaultAzureCredential), например. если они запускают приложение в докере, они могут указать переменные среды AZURE_USERNAME и AZURE_PASSWORD (или, альтернативно, AZURE_CLIENT_ID и AZURE_CLIENT_SECRET для большего «машинного» контекста), например. docker run -e AZURE_USERNAME=username -e AZURE_PASSWORD=password ...
Исходя из вашего вопроса, я предполагаю следующее:
new DefaultAzureCredential(true) просто захватывает текущие учетные данные пользователей. Это будет пользователь переднего плана. Они автоматически кэшируются в соответствии с политикой безопасности вашей организации. Я предполагаю, что это работает правильно.
Частота входа находится вне вашего контроля как разработчика. Проблема, с которой вы столкнулись, связана с организационными параметрами в Azure Active Directory. Ваша частота входа может быть установлена одной из следующих:
Требовать повторную аутентификацию каждый раз
Контроль частоты входа каждый раз, когда рискованный пользователь
Чтобы решить вашу проблему, установите частоту входа меньше, чем это, и все будет хорошо. (У меня нет доступа к этому, я бы выложил более качественные фотографии)
Вот ссылка на полную статью о том, как это сделать:
Настройте управление сеансом аутентификации с помощью условного доступа
Интересный подход, я вижу, что поставщик учетных данных azure cli создает токен, который действителен в течение 90 дней. Можно ли как-то изменить срок службы токена, предоставленного InteractiveBrowserCredential?
Я думаю, это описывает, как это сделать. Я перечитал ваш вопрос и у меня возник вопрос. Все ли пользователи используют управляемое удостоверение для входа в систему? Если да, пробовали ли вы использовать их индивидуальные учетные записи? Я не думаю, что учетные данные для управляемого удостоверения когда-либо будут кэшироваться, если они работают под другим удостоверением.
да - я ошибочно упомянул это как управляемую идентификацию, когда они фактически использовали свою индивидуальную учетную запись для входа в систему.
Это было то, что я искал
https://github.com/Azure/azure-sdk-for-net/issues/23896
Шаг автоматической проверки подлинности, при котором учетные данные сохраняются в первый раз, когда они вводятся в файл кэша, а затем повторно используются при повторном запуске приложения без запроса пользователя на ввод учетных данных.
Таким образом, учетные данные не хранятся в git, а файл кеша хранится локально на каждом локальном компьютере разработчика.
Поскольку вы используете логин отдельных пользователей, я бы посоветовал вам использовать первую часть решения @Ryan.Bartsch и использовать IAM. В зависимости от вашей политики сброса пароля, это может вас укусить и создать больше работы для вас в будущем. Это также более безопасно и будет соответствовать политике безопасности вашей компании, которая может включать двухфакторную аутентификацию. Но у вас может быть конкретный вариант использования, поэтому я оставлю окончательное решение за вами.
DefaultAzureCredentials — это упорядоченный конвейер различных способов проверки подлинности (из документа): EnvironmentCredential, ManagedIdentityCredential, SharedTokenCacheCredential, VisualStudioCredential, VisualStudioCodeCredential, AzureCliCredential, AzurePowerShellCredential, InteractiveBrowserCredential. Просто убедитесь, что хотя бы один из них работает успешно (каждый работает по-своему).