Estou assumindo autenticação básica aqui.
$cred = Get-Credential
Invoke-WebRequest -Uri 'https://whatever' -Credential $cred
Você pode obter sua credencial por outros meios ( Import-Clixml
, etc.), mas ela precisa ser um [PSCredential]
objeto.
Edite com base nos comentários:
O GitHub está quebrando o RFC, conforme explicado no link que você forneceu :
A API suporta autenticação básica, conforme definido na RFC2617, com algumas pequenas diferenças. A principal diferença é que o RFC exige que solicitações não autenticadas sejam respondidas com 401 respostas não autorizadas. Em muitos lugares, isso revelaria a existência de dados do usuário. Em vez disso, a API do GitHub responde com 404 não encontrado. Isso pode causar problemas para bibliotecas HTTP que assumem uma resposta 401 não autorizada. A solução é criar manualmente o cabeçalho da autorização.
Pelo que sei, o Powershell's Invoke-WebRequest
espera uma resposta 401 antes de enviar as credenciais, e como o GitHub nunca fornece uma, suas credenciais nunca serão enviadas.
Crie manualmente os cabeçalhos
Em vez disso, você precisará criar os cabeçalhos de autenticação básicos.
A autenticação básica utiliza uma sequência que consiste no nome de usuário e na senha separados por dois pontos user:pass
e envia o resultado codificado em Base64.
Código como este deve funcionar:
$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
Você poderia combinar parte da concatenação de cadeias, mas eu queria quebrá-la para torná-la mais clara.
$pair = "$($user):$($pass)"
Verifique a resposta aprovada. Eu estava usando o exposto, e isso me deu muita dor