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