Estoy asumiendo la autenticación básica aquí.
$cred = Get-Credential
Invoke-WebRequest -Uri 'https://whatever' -Credential $cred
Puede obtener su credencial a través de otros medios ( Import-Clixml
, etc.), pero tiene que ser un [PSCredential]
objeto.
Editar basado en comentarios:
GitHub está rompiendo RFC como explican en el enlace que proporcionó :
La API admite la autenticación básica como se define en RFC2617 con algunas pequeñas diferencias. La principal diferencia es que el RFC requiere que las solicitudes no autenticadas sean respondidas con 401 respuestas no autorizadas. En muchos lugares, esto revelaría la existencia de datos del usuario. En cambio, la API de GitHub responde con 404 No encontrado. Esto puede causar problemas para las bibliotecas HTTP que asumen una respuesta no autorizada 401. La solución es crear manualmente el encabezado de autorización.
Powershell, Invoke-WebRequest
según mi conocimiento, espera una respuesta 401 antes de enviar las credenciales, y dado que GitHub nunca proporciona una, sus credenciales nunca se enviarán.
Construir manualmente los encabezados
En su lugar, deberá crear los encabezados de autenticación básicos usted mismo.
La autenticación básica toma una cadena que consiste en el nombre de usuario y la contraseña separados por dos puntos user:pass
y luego envía el resultado codificado en Base64 de eso.
Un código como este debería 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
Podrías combinar algunas de las concatenaciones de cuerdas, pero quería separarlas para aclararlas.
$pair = "$($user):$($pass)"
Compruebe la respuesta aprobada. Estaba usando lo anterior y me dio demasiado dolor