Мы можем сделать это, используя скрипт Azure PowerShell в коде C#. Для этого нам потребуется только имя ключа, имя секретного и Azure учетных данных пользователя, который хочет получить к нему доступ.
static void Main(string[] args)
{
Program program = new Program();
string scriptText = "Login-AzureRmAccount";
string result = program.RunScript(scriptText);
Console.WriteLine(result);
Console.ReadLine();
}
private string RunScript(string scriptText)
{
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(scriptText);
pipeline.Commands.AddScript("$secret = Get-AzureKeyVaultSecret -VaultName '[Name_of_keyVault]' -Name '[Name_of_secret]'");
pipeline.Commands.AddScript("Write $secret.SecretValueText");
Collection<PSObject> results = pipeline.Invoke();
runspace.Close();
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in results)
{
stringBuilder.AppendLine(obj.ToString());
}
return stringBuilder.ToString();
}
Фактически, я хотел получить доступ к ключевому хранилищу без аутентификации приложения AD. Это был единственный способ, о котором я мог думать.
Почему вы вызываете PS изнутри C#, когда есть пакеты, чтобы сделать это напрямую? Не нужно вызывать PS из C#. Кроме того, вы просто входите в AAD? Вопрос сказал, что он не хотел этого делать. – nashwan