Burada Temel kimlik doğrulamasını varsayıyorum.
$cred = Get-Credential
Invoke-WebRequest -Uri 'https://whatever' -Credential $cred
Kimlik bilgilerinizi başka yollarla ( Import-Clixml
vb.) Edinebilirsiniz, ancak bunun bir [PSCredential]
nesne olması gerekir .
Yorumlara göre düzenleyin:
GitHub, sağladığınız bağlantıda açıklandığı gibi RFC'yi bozuyor :
API, RFC2617'de tanımlandığı gibi, birkaç küçük farkla Temel Kimlik Doğrulamayı destekler. Temel fark, RFC'nin kimliği doğrulanmamış isteklerin 401 Yetkisiz yanıtlarla yanıtlanmasını gerektirmesidir. Birçok yerde bu, kullanıcı verilerinin varlığını ortaya çıkarır. Bunun yerine GitHub API, 404 Not Found ile yanıt verir. Bu, 401 Yetkisiz yanıtı olduğunu varsayan HTTP kitaplıkları için sorunlara neden olabilir. Çözüm, Yetkilendirme başlığını manuel olarak oluşturmaktır.
Powershell'in Invoke-WebRequest
bildiğim kadarıyla, kimlik bilgilerini göndermeden önce 401 yanıtını bekler ve GitHub hiçbir zaman yanıt vermediği için kimlik bilgileriniz asla gönderilmez.
Başlıkları manuel olarak oluşturun
Bunun yerine, temel kimlik doğrulama başlıklarını kendiniz oluşturmanız gerekir.
Temel kimlik doğrulama, iki nokta üst üste user:pass
ile ayrılmış kullanıcı adı ve paroladan oluşan bir dizeyi alır ve ardından bunun Base64 kodlu sonucunu gönderir.
Bunun gibi bir kod çalışmalıdır:
$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
Dize birleştirme işleminin bir kısmını birleştirebilirsiniz, ancak daha net hale getirmek için onu kırmak istedim.
$pair = "$($user):$($pass)"
Onaylanmış cevabı kontrol et olmalıdır . Yukarıdakileri kullanıyordum ve bu bana çok fazla acı verdi