Как удалить учетную запись хранения Azure с помощью функции Azure, запускаемой через HTTP - PullRequest
0 голосов
/ 08 апреля 2019

Не удается удалить учетную запись хранения с помощью функции Azure.Если бы кто-нибудь мог направить меня в правильном направлении, он был бы очень признателен

Ожидаемый результат: Когда я выполняю POST-запрос к своей функции Azure, моя функция Azure должна удалить учетную запись хранения в другой группе ресурсов

Редактировать: Это то, что у меня есть, после помощи Питера Пэна:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Security.Claims;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using Microsoft.IdentityModel.Clients.ActiveDirectory;



public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

  //  string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
  //  dynamic data = JsonConvert.DeserializeObject(requestBody);

    // performing something with Json here
     // ...

AuthenticationResult result = null;
//.... codes for getting access token
AuthenticationContext authContext = new AuthenticationContext(authority);
ClientCredential clientCredential = new ClientCredential("xxxx-xxxx-xxxx-xxxx-xxxx", "xxxxxxxxxxxxxxxxxxx/=");
result = await authContext.AcquireTokenAsync("/subscriptions/xxxxx/resourceGroups/xxxx", clientCredential);

var client = new HttpClient();
client.BaseAddress = new Uri("https://management.azure.com/");
client.DefaultRequestHeaders.Add("Authorization", "Bearer "+result.AccessToken);
var resp = client.DeleteAsync("subscriptions/xxxxxxx/resourceGroups/xxxxxx/providers/Microsoft.Storage/storageAccounts/xxxxxxxxxx?api-version=2018-11-01");
return resp.StatusCode.Equals("200") ? new OkResult() : new NotFoundResult();

}

Ошибка возвращается:

2019-04-13T10:23:51.234 [Error] run.csx(18,17): error CS0234: The type or namespace name 'IdentityModel' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
2019-04-13T10:23:51.412 [Error] run.csx(32,1): error CS0246: The type or namespace name 'AuthenticationResult' could not be found (are you missing a using directive or an assembly reference?)
2019-04-13T10:23:51.454 [Error] run.csx(34,1): error CS0246: The type or namespace name 'AuthenticationContext' could not be found (are you missing a using directive or an assembly reference?)
2019-04-13T10:23:51.514 [Error] run.csx(34,41): error CS0246: The type or namespace name 'AuthenticationContext' could not be found (are you missing a using directive or an assembly reference?)
2019-04-13T10:23:51.556 [Error] run.csx(34,63): error CS0103: The name 'authority' does not exist in the current context

1 Ответ

0 голосов
/ 09 апреля 2019

Похоже, вы хотите использовать REST API Storage Accounts - Delete для удаления учетной записи хранения в функции Azure с помощью Http Trigger, но отсутствуют некоторые коды для добавления заголовка Authorization в ваш http удалить запрос.

Запрос Storage Accounts - Delete REST API должен быть таким, как показано ниже.

DELETE https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}?api-version=2018-11-01
Authorization: Bearer <accessToken got from Azure AD by your web client as the code `result.AccessToken` below>

Код для вызова API выше должен быть таким, как показано ниже.

AuthenticationResult result = null;
//.... codes for getting access token
AuthenticationContext authContext = new AuthenticationContext(authority);
ClientCredential clientCredential = new ClientCredential(clientId, appKey);
result = await authContext.AcquireTokenAsync(todoListResourceId, clientCredential);

var client = new HttpClient();
client.BaseAddress = new Uri("https://management.azure.com/")
client.DefaultRequestHeaders.Add("Authorization", "Bearer "+result.AccessToken);
var resp = client.DeleteAsync("subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}?api-version=2018-11-01")
return resp.StatusCode.Equals("200") ? new OkResult() : new NotFoundResult();

Вы можете обратиться к исходному коду TodoListController.cs примера кода Azure-Samples/active-directory-dotnet-webapp-webapi-oauth2-appidentity, чтобы узнать больше информации о том, как получить токен доступа из Azure AD через зарегистрированный веб-сайт. клиент. Более подробную информацию о регистрации клиентов в Azure AD можно получить, ознакомившись с официальным документом Azure REST API Reference и предоставив необходимые разрешения или роль на портале Azure.

...