Dengan cURL, kita dapat mengirimkan nama pengguna dengan permintaan web HTTP sebagai berikut:
$ curl -u <your_username> https://api.github.com/user
The -u
bendera menerima nama pengguna untuk otentikasi, dan kemudian cURL akan meminta password. Contoh cURL adalah untuk otentikasi dasar dengan GitHub Api .
Bagaimana kita juga memberikan nama pengguna dan kata sandi bersama dengan Invoke-WebRequest? Tujuan utamanya adalah untuk menggunakan PowerShell dengan otentikasi Dasar di GitHub API.
powershell
github-api
basic-authentication
Shaun Luttin
sumber
sumber
$pair = "$($user):$($pass)"
Periksa jawaban yang disetujui. Saya menggunakan cara di atas dan itu memberi saya terlalu banyak rasa sakit-Credential
pendekatan tersebut berfungsi karena header autentikasi yang benar tidak dibuat saat permintaan dibuat.Jawaban:
Saya mengasumsikan otentikasi dasar di sini.
Anda bisa mendapatkan kredensial Anda melalui cara lain (
Import-Clixml
, dll.), Tetapi kredensial harus berupa[PSCredential]
objek.Edit berdasarkan komentar:
GitHub melanggar RFC seperti yang mereka jelaskan di tautan yang Anda berikan :
Sepengetahuan saya, Powershell
Invoke-WebRequest
harus menunggu respons 401 sebelum mengirim kredensial, dan karena GitHub tidak pernah menyediakannya, kredensial Anda tidak akan pernah dikirim.Buat header secara manual
Sebagai gantinya, Anda harus membuat sendiri header autentikasi dasar.
Otentikasi dasar mengambil string yang terdiri dari nama pengguna dan kata sandi yang dipisahkan oleh titik dua
user:pass
dan kemudian mengirimkan hasil yang dikodekan Base64 itu.Kode seperti ini seharusnya berfungsi:
Anda dapat menggabungkan beberapa rangkaian string tetapi saya ingin memecahnya agar lebih jelas.
sumber
Gunakan ini:
sumber
Saya harus melakukan ini agar berhasil:
sumber
Invoke-WebRequest
mengikuti RFC2617 sebagai @briantist mencatat, namun ada beberapa sistem (misalnya JFrog Artifactory) yang memungkinkan penggunaan anonim jikaAuthorization
header tidak ada, tetapi akan merespons401 Forbidden
jika header berisi kredensial yang tidak valid.Ini dapat digunakan untuk memicu
401 Forbidden
respons dan mulai-Credentials
bekerja.Ini akan mengirim tajuk yang tidak valid untuk pertama kalinya, yang akan diganti dengan kredensial yang valid dalam permintaan kedua karena
-Credentials
menimpaAuthorization
tajuk.Diuji dengan Powershell 5.1
sumber
Jika seseorang membutuhkan satu liner:
sumber
cara lain adalah dengan menggunakan certutil.exe simpan nama pengguna dan kata sandi Anda di file misalnya in.txt sebagai nama pengguna: kata sandi
Sekarang Anda seharusnya dapat menggunakan nilai auth dari out.txt
sumber
Saya tahu ini sedikit dari permintaan asli OP tetapi saya menemukan ini saat mencari cara untuk menggunakan Invoke-WebRequest terhadap situs yang membutuhkan otentikasi dasar.
Bedanya, saya tidak ingin mencatat kata sandi di skrip. Sebaliknya, saya ingin meminta kredensial untuk situs tersebut kepada pelari skrip.
Begini cara saya menanganinya
Hasilnya adalah runner skrip diminta dengan dialog login untuk U / P, kemudian Invoke-WebRequest dapat mengakses situs dengan kredensial tersebut. Ini berfungsi karena $ Creds.Password sudah menjadi string terenkripsi.
Saya harap ini membantu seseorang yang mencari solusi serupa untuk pertanyaan di atas tetapi tanpa menyimpan nama pengguna atau PW di skrip
sumber
Inilah yang berhasil untuk situasi khusus kami.
Catatan berasal dari Wikipedia tentang Basic Auth dari Sisi Klien . Terima kasih untuk jawaban @ briantist atas bantuannya!
Gabungkan nama pengguna dan kata sandi menjadi satu string
username:password
Enkode string ke varian RFC2045-MIME dari Base64, kecuali tidak terbatas pada 76 karakter / baris.
Buat nilai Auth sebagai metode, spasi, lalu pasangan yang dikodekan
Method Base64String
Buat tajuk
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Panggil permintaan web
Versi PowerShell ini lebih bertele-tele daripada versi cURL. Mengapa demikian? @briantist menunjukkan bahwa GitHub melanggar RFC dan PowerShell berpegang teguh padanya. Apakah itu berarti cURL juga melanggar standar?
sumber