2014-12-12 18 views
7

Tôi đang cố gắng sử dụng PowerShell để đặt tệp nội dung được cập nhật lên Trang web Azure thông qua API REST. Tuy nhiên, khi cung cấp thông tin đăng nhập của tôi vào Invoke-RestMethod -Credentials Tôi đã trả về HTML của trang đăng nhập Azure chuẩn.Trang web Azure Kudu REST API - Xác thực

Tôi làm cách nào để xác thực với Kudu từ PowerShell? Cảm ơn.

Trả lời

13

Trước tiên, bạn có thể truy cập trang web qua Powershell và sau đó sử dụng thông tin đăng nhập xuất bản từ trang web để gọi API REST Kudu. Ví dụ bên dưới sẽ có phiên bản 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

Tuyệt vời ví dụ và demo của auth cơ bản. –

+0

Tôi đã thêm một câu trả lời mới để đưa câu trả lời của @ Seth vào thế giới Azure ARM. –

+0

Cẩn thận, nếu bạn đang sử dụng vị trí, trang web $.Name sẽ là websitename (slot) trong trường hợp đó, Invoke-RestMethod không thành công. Thay vào đó, '$ matchedNames = $ azureWebSite.EnabledHostNames -match 'scm' if ($ matchedNames -and $ matchedNames.count -gt 0) { $ WebSiteName = $ matchedNames [0] }' – Yash

6

Trong thế giới ARM mới và với PowerShell mới nhất, bạn cần thực hiện một số điều chỉnh cho câu trả lời của @ Seth.

Cụ thể, cách bạn nhận được tín dụng xuất bản khác nhau, đó là 3 dòng đầu tiên. Phần còn lại tôi không biết phải sao chép từ @Seth để hoàn thành đoạn trích.

Hãy chắc chắn rằng để thay thế YourResourceGroup/YourWebApp như thích hợp:

$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

Tôi đang cố gắng có được thông tin đăng nhập thông qua cmdlet của bạn ở trên nhưng sử dụng một ResourceId thay vào đó và tôi luôn luôn nhận được một lỗi. Những gì tôi đã làm là chạy lệnh của bạn, có được các thông tin đúng và sau đó sử dụng các Id như là -ResourceId để xem nếu tôi có thể nhận được chúng (tôi cần phải tự động hóa này cho một loạt các trang web trong resourcegroups khác nhau). Bất kỳ ý tưởng về lý do tại sao điều này có thể không hoạt động? –

+0

Xin lỗi, tôi không hoàn toàn theo dõi. Tốt nhất nên đặt một câu hỏi mới để bạn có thể hiển thị chi tiết hơn những gì bạn đang cố gắng. Đăng liên kết câu hỏi mới tại đây và tôi sẽ cố gắng xem xét. –

+0

Câu hỏi đặt ra là [ở đây] (http://stackoverflow.com/questions/36801349/how-to-access-the-publishing-credentials-of-a-website-using-azure-rm-and-resourc), cảm ơn ! –

Các vấn đề liên quan