Zakładam tutaj uwierzytelnianie podstawowe.
$cred = Get-Credential
Invoke-WebRequest -Uri 'https://whatever' -Credential $cred
Możesz uzyskać swoje dane uwierzytelniające w inny sposób ( Import-Clixml
itp.), Ale musi to być [PSCredential]
obiekt.
Edytuj na podstawie komentarzy:
GitHub łamie RFC, jak wyjaśniają w podanym przez Ciebie łączu :
Interfejs API obsługuje uwierzytelnianie podstawowe zdefiniowane w dokumencie RFC2617 z kilkoma niewielkimi różnicami. Główną różnicą jest to, że RFC wymaga odpowiedzi na nieuwierzytelnione żądania za pomocą 401 nieautoryzowanych odpowiedzi. W wielu miejscach ujawniłoby to istnienie danych użytkownika. Zamiast tego interfejs API GitHub odpowiada komunikatem 404 Not Found. Może to powodować problemy dla bibliotek HTTP, które zakładają odpowiedź nieautoryzowaną 401. Rozwiązaniem jest ręczne utworzenie nagłówka Authorization.
Według Invoke-WebRequest
mojej wiedzy, PowerShell czeka na odpowiedź 401 przed wysłaniem poświadczeń, a ponieważ GitHub nigdy ich nie dostarcza, twoje poświadczenia nigdy nie zostaną wysłane.
Ręcznie utwórz nagłówki
Zamiast tego będziesz musiał samodzielnie utworzyć podstawowe nagłówki uwierzytelniania.
Uwierzytelnianie podstawowe pobiera ciąg składający się z nazwy użytkownika i hasła oddzielone dwukropkiem, user:pass
a następnie wysyła wynik zakodowany w formacie Base64.
Kod taki powinien działać:
$user = 'user'
$pass = 'pass'
$pair = "$($user):$($pass)"
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
$basicAuthValue = "Basic $encodedCreds"
$Headers = @{
Authorization = $basicAuthValue
}
Invoke-WebRequest -Uri 'https://whatever' -Headers $Headers
Możesz łączyć niektóre konkatenacje ciągów, ale chciałem to przerwać, aby było jaśniejsze.
$pair = "$($user):$($pass)"
Sprawdź zatwierdzoną odpowiedź.