Sto assumendo qui l'autenticazione di base.
$cred = Get-Credential
Invoke-WebRequest -Uri 'https://whatever' -Credential $cred
Puoi ottenere le tue credenziali con altri mezzi ( Import-Clixml
, ecc.), Ma deve essere un [PSCredential]
oggetto.
Modifica in base ai commenti:
GitHub sta rompendo RFC come spiegano nel link che hai fornito :
L'API supporta l'autenticazione di base come definito in RFC2617 con alcune lievi differenze. La differenza principale è che RFC richiede risposte non autenticate con 401 risposte non autorizzate. In molti luoghi, ciò rivelerebbe l'esistenza dei dati dell'utente. Invece, l'API GitHub risponde con 404 Not Found. Ciò può causare problemi per le librerie HTTP che assumono una risposta 401 non autorizzata. La soluzione è creare manualmente l'intestazione dell'autorizzazione.
Per quanto ne so, Powershell Invoke-WebRequest
attende una risposta 401 prima di inviare le credenziali e poiché GitHub non ne fornisce mai una, le tue credenziali non verranno mai inviate.
Costruisci manualmente le intestazioni
Dovrai invece creare tu stesso le intestazioni di autenticazione di base.
L'autenticazione di base accetta una stringa composta da nome utente e password separati da due punti user:pass
e quindi invia il risultato con codifica Base64.
Codice come questo dovrebbe funzionare:
$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
Potresti combinare un po 'della concatenazione di stringhe ma volevo risolverlo per renderlo più chiaro.
$pair = "$($user):$($pass)"
Controlla la risposta approvata. Stavo usando quanto sopra e mi ha dato troppo dolore