Функции Azure. Как программно получить доступ к ключу хоста с помощью кода C #? - PullRequest
1 голос
/ 25 сентября 2019

Я пишу приложение-функцию Azure, которое должно предоставить HTML-страницу с формой.Форма должна быть отправлена ​​обратно на одну из конечных точек приложения.Приложение должно быть защищено с помощью ключа авторизации Azure .

Azure позволяет вызывающему абоненту предоставлять свой ключ двумя способами:

  1. с code параметр запроса запроса.
  2. С HTTP-заголовком x-functions-clientid.

Чтобы сделать успешным вызов другой конечной точки приложения-функции Azure, мне потребуется предоставитьХост Ключ вместе с моим запросом.Например, вот так:

    <form method='post' action='DoSomething?code={{{WHERE TO GET THIS FROM?}}}'>
        <input name='someInput' />
        <input type='submit' />
    </form>

Я использую C # для генерации HTML-кода.Какой самый пуленепробиваемый способ получить ключ хоста / a программным способом?

1 Ответ

1 голос
/ 26 сентября 2019

Вы можете использовать Microsoft.Azure.Management.ResourceManager.Fluent и Microsoft.Azure.Management.Fluent для этого.

Для получения дополнительной информации обратитесь к этой теме SO .

string clientId = "client id";
 string secret = "secret key";
 string tenant = "tenant id";
 var functionName ="functionName";
 var webFunctionAppName = "functionApp name";
 string resourceGroup = "resource group name";
 var credentials = new AzureCredentials(new ServicePrincipalLoginInformation { ClientId = clientId, ClientSecret = secret}, tenant, AzureEnvironment.AzureGlobalCloud);
 var azure = Azure
          .Configure()
          .Authenticate(credentials)
          .WithDefaultSubscription();

 var webFunctionApp = azure.AppServices.FunctionApps.GetByResourceGroup(resourceGroup, webFunctionAppName);
 var ftpUsername = webFunctionApp.GetPublishingProfile().FtpUsername;
 var username = ftpUsername.Split('\\').ToList()[1];
 var password = webFunctionApp.GetPublishingProfile().FtpPassword;
 var base64Auth = Convert.ToBase64String(Encoding.Default.GetBytes($"{username}:{password}"));
 var apiUrl = new Uri($"https://{webFunctionAppName}.scm.azurewebsites.net/api");
 var siteUrl = new Uri($"https://{webFunctionAppName}.azurewebsites.net");
 string JWT;
 using (var client = new HttpClient())
  {
     client.DefaultRequestHeaders.Add("Authorization", $"Basic {base64Auth}");

     var result = client.GetAsync($"{apiUrl}/functions/admin/token").Result;
     JWT = result.Content.ReadAsStringAsync().Result.Trim('"'); //get  JWT for call funtion key
   }
 using (var client = new HttpClient())
 {
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + JWT);
    var key = client.GetAsync($"{siteUrl}/admin/functions/{functionName}/keys").Result.Content.ReadAsStringAsync().Result;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...