Я предполагаю здесь базовую аутентификацию.
$cred = Get-Credential
Invoke-WebRequest -Uri 'https://whatever' -Credential $cred
Вы можете получить свои учетные данные другими способами ( Import-Clixml
и т. Д.), Но это должен быть [PSCredential]
объект.
Редактировать на основе комментариев:
GitHub нарушает RFC, как они объясняют в предоставленной вами ссылке :
API поддерживает базовую аутентификацию, как определено в RFC2617 с некоторыми небольшими отличиями. Основное отличие заключается в том, что RFC требует, чтобы на неаутентифицированные запросы отвечал 401 неавторизованный ответ. Во многих местах это раскрыло бы существование пользовательских данных. Вместо этого GitHub API отвечает 404 Not Found. Это может вызвать проблемы для библиотек HTTP, предполагающих ответ 401 Неавторизованный. Решение состоит в том, чтобы вручную создать заголовок авторизации.
Powershell, Invoke-WebRequest
насколько мне известно, ожидает ответа 401 перед отправкой учетных данных, и поскольку GitHub никогда не предоставляет его, ваши учетные данные никогда не будут отправлены.
Создайте заголовки вручную
Вместо этого вам придется самостоятельно создавать основные заголовки аутентификации.
Обычная проверка подлинности принимает строку, состоящую из имени пользователя и пароля, разделенных двоеточием, user:pass
и затем отправляет результат в кодировке Base64.
Такой код должен работать:
$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
Вы можете объединить некоторые конкатенации строк, но я хотел разбить их, чтобы было понятнее.
$pair = "$($user):$($pass)"
Проверить утвержденный ответ. Я использовал вышеупомянутое, и это доставляло мне слишком много боли