API REST Kudu для веб-сайтов Azure - аутентификация

Я пытаюсь использовать PowerShell, чтобы поместить обновленный файл содержимого на веб-сайт Azure через REST API. Однако при вводе учетных данных в Invoke-RestMethod -Credentials мне возвращается HTML-код стандартной страницы входа в Azure.

Как я могу пройти аутентификацию с помощью Kudu из PowerShell? Спасибо.


person Luke Puplett    schedule 12.12.2014    source источник


Ответы (2)


Вы можете сначала получить веб-сайт через Powershell, а затем использовать учетные данные публикации с веб-сайта для вызова Kudu REST API. В приведенном ниже примере будет представлена ​​версия Kudu.

$website = Get-AzureWebsite -Name "WebsiteName"

$username = $website.PublishingUsername
$password = $website.PublishingPassword
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))

$apiBaseUrl = "https://$($website.Name).scm.azurewebsites.net/api"

$kuduVersion = Invoke-RestMethod -Uri "$apiBaseUrl/environment" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET
person Seth    schedule 27.12.2014
comment
Отличный пример и демонстрация базовой аутентификации. - person Luke Puplett; 28.12.2014
comment
Я добавил новый ответ, чтобы перенести ответ @Seth в мир Azure ARM. - person David Ebbo; 30.12.2015
comment
Будьте осторожны, если вы используете слот, $ website.Name будет websitename (slot), и в этом случае Invoke-RestMethod не работает. Вместо этого сделайте $matchedNames = $azureWebSite.EnabledHostNames -match 'scm' if($matchedNames -and $matchedNames.count -gt 0) { $WebSiteName = $matchedNames[0] } - person Yash; 22.01.2016

В новом мире ARM и с последней версией PowerShell вам необходимо внести некоторые изменения в ответ @Seth.

В частности, способ получения авторских прав на публикацию отличается, это первые 3 строки. Остальное я беззастенчиво скопировал из @Seth, чтобы завершить фрагмент.

Обязательно замените YourResourceGroup / YourWebApp соответствующим образом:

$creds = Invoke-AzureRmResourceAction -ResourceGroupName YourResourceGroup -ResourceType Microsoft.Web/sites/config -ResourceName YourWebApp/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force

$username = $creds.Properties.PublishingUserName
$password = $creds.Properties.PublishingPassword
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))

$apiBaseUrl = "https://$($website.Name).scm.azurewebsites.net/api"

$kuduVersion = Invoke-RestMethod -Uri "$apiBaseUrl/environment" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET
person David Ebbo    schedule 30.12.2015
comment
Я пытаюсь получить учетные данные с помощью приведенного выше командлета, но вместо этого использую ResourceId и всегда получаю сообщение об ошибке. Что я сделал, так это запустил вашу команду, получил правильные учетные данные, а затем использовал идентификатор в качестве -ResourceId, чтобы узнать, смогу ли я их получить (мне нужно автоматизировать это для серии веб-сайтов в разных группах ресурсов). Есть идеи, почему это может не работать? - person Antón Molleda; 21.04.2016
comment
Извините, я не полностью понимаю. Лучше всего задать новый вопрос, чтобы вы могли более подробно рассказать, что вы пытаетесь сделать. Отправьте ссылку на новый вопрос здесь, и я постараюсь взглянуть. - person David Ebbo; 22.04.2016
comment
Вопрос здесь , спасибо! - person Antón Molleda; 22.04.2016