2014-12-12 4 views
7

저는 PowerShell을 사용하여 업데이트 된 콘텐츠 파일을 REST API를 통해 Azure 웹 사이트에 저장하려고합니다. 그러나 내 자격 증명을 Invoke-RestMethod -Credentials에 제공하면 표준 Azure 로그인 페이지의 HTML이 반환됩니다.Azure 웹 사이트 Kudu REST API - 인증

PowerShell에서 Kudu로 어떻게 인증 할 수 있습니까? 감사.

답변

13

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 
+0

우수한 예 및 기본 인증의 데모. –

+0

@ Seth의 답변을 Azure ARM 세계에 적용 할 새로운 대답을 추가했습니다. –

+0

주의 : slot을 사용하는 경우 $ website.Name은 websitename (슬롯)이됩니다.이 경우 Invoke-RestMethod는 실패합니다. 대신'$ matchedNames = $ azureWebSite.EnabledHostNames -match 'SCM' 경우을 ($ matchedNames - 그리고 $ matchedNames.count -gt 0) { $ WebSiteName 선택 = $ matchedNames [0] 을}'나는에 노력하고있어 – Yash

6

새로운 ARM 세계와 최신 PowerShell에서는 @eth의 대답을 약간 조정해야합니다.

특히, 게시 신용을 얻는 방법은 처음 세 줄이 다릅니다. 나머지 부분은 @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 
+0

위의 cmdlet을 통해 자격 증명을 가져 오지 만 대신 ResourceId를 사용하면 항상 오류가 발생합니다. 내가 한 것은 명령을 실행하고 올바른 자격 증명을 얻은 다음 Id를 -ResourceId로 사용하여 가져올 수 있는지 확인하는 것입니다 (여러 리소스 그룹에있는 일련의 웹 사이트를 자동화해야 함). 이것이 왜 작동하지 않을 수 있는지에 대한 아이디어가 있습니까? –

+0

죄송합니다, 완전히 따라하지 않습니다. 새로운 질문을하는 것이 가장 좋을 것이므로, 당신이 시도하는 것을 더 자세하게 보여줄 수 있습니다. 여기에 새로운 질문 링크를 게시하십시오. –

+0

질문은 [여기]입니다 (http://stackoverflow.com/questions/36801349/how-to-access-the-publishing-credentials-of-a-website-using-azure-rm-and-resourc), thanks ! –