Tôi giả sử xác thực cơ bản ở đây.
$cred = Get-Credential
Invoke-WebRequest -Uri 'https://whatever' -Credential $cred
Bạn có thể có được thông tin xác thực của mình thông qua các phương tiện khác ( Import-Clixml
, v.v.), nhưng nó phải là một [PSCredential]
đối tượng.
Chỉnh sửa dựa trên ý kiến:
GitHub đang phá vỡ RFC khi họ giải thích trong liên kết bạn cung cấp :
API hỗ trợ Xác thực cơ bản như được định nghĩa trong RFC2617 với một vài khác biệt nhỏ. Sự khác biệt chính là RFC yêu cầu các yêu cầu không được xác thực phải được trả lời với 401 phản hồi trái phép. Ở nhiều nơi, điều này sẽ tiết lộ sự tồn tại của dữ liệu người dùng. Thay vào đó, API GitHub phản hồi với 404 Không tìm thấy. Điều này có thể gây ra sự cố cho các thư viện HTTP giả sử phản hồi trái phép 401. Giải pháp là tự tạo thủ công Tiêu đề ủy quyền.
Invoke-WebRequest
Kiến thức của Powershell chờ đợi phản hồi của 401 trước khi gửi thông tin đăng nhập và vì GitHub không bao giờ cung cấp thông tin, thông tin đăng nhập của bạn sẽ không bao giờ được gửi.
Xây dựng thủ công
Thay vào đó, bạn sẽ phải tự tạo các tiêu đề xác thực cơ bản.
Xác thực cơ bản lấy một chuỗi bao gồm tên người dùng và mật khẩu được phân tách bằng dấu hai chấm user:pass
và sau đó gửi kết quả được mã hóa Base64 của điều đó.
Mã như thế này sẽ hoạt động:
$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
Bạn có thể kết hợp một số nối chuỗi nhưng tôi muốn phá vỡ nó để làm cho nó rõ ràng hơn.
$pair = "$($user):$($pass)"
Kiểm tra câu trả lời đã được phê duyệt. Tôi đã sử dụng những thứ trên và nó mang lại cho tôi quá nhiều nỗi đau