Недавно экспериментируя с функциями Azure в домене моего клиента, я успешно развернул одну из них и вызвал ее из консольного приложения .NET.
Я хотел бы ограничить доступ к этой функции для внутренних пользователей, которые являются членами группы AD. Я понимаю, что, вероятно, функции предназначены не для этого, поэтому не стесняйтесь выражать свои сомнения.
Несмотря на часы, потраченные на гугление, все, что мне удалось сделать, это активировать аутентификацию AppService, как описано здесь в разделе «Настройка аутентификации и авторизации».
Затем мое консольное приложение начало давать сбой с кодом 401 Несанкционировано и "У вас нет разрешения на просмотр этого каталога или страницы" в содержимом ответа - пока все хорошо... Затем я подумал, что могу просто сказать Azure, чтобы оно требовало членства в AD группу для вызова функции, а-ля WCF, но как? Я не могу управлять Azure Active Directory моего клиента, поэтому, возможно, я просто не могу добраться до того места, где можно создать эту ассоциацию (если вообще возможный).
Вот мой код для вызова функции:
private static async void CallMyTypedFunctionAsync()
{
var functionAddress = "https://[...].azurewebsites.net/api/MyTypedFunction";
var requestDto = new DataContracts.MyTypedFunctionReqest { X = 6, Y = 7 };
HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, functionAddress)
{
Content = new StringContent(JsonConvert.SerializeObject(requestDto), Encoding.UTF8, "application/json")
};
var httpClient = new HttpClient();
var response = await httpClient.SendAsync(message);
var responseContent = await response.Content.ReadAsStringAsync();
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
var responseDto = JsonConvert.DeserializeObject<DataContracts.MyTypedFunctionResponse>(responseContent);
Console.WriteLine("CallMyTypedFunctionAsync's result: {0}", responseDto.Z); // 42
}
else
Console.WriteLine("CallMyTypedFunctionAsync has failed. {0}: {1}", response.StatusCode, responseContent);
}