Saya mencoba untuk POST data dari API saya tetapi saya tidak bisa melewati otentikasi dasar.
Saya coba:
$.ajax({
type: 'POST',
url: http://theappurl.com/api/v1/method/,
data: {},
crossDomain: true,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Basic [REDACTED]');
}
});
Respons konfigurasi server saya adalah:
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "POST"
response["Access-Control-Max-Age"] = "1000"
response["Access-Control-Allow-Headers"] = "*"
Header yang saya dapatkan adalah:
Minta Header
OPTIONS /api/v1/token-auth/ HTTP/1.1
Host: theappurl.com
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://127.0.0.1:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31
Access-Control-Request-Headers: origin, authorization, content-type
Accept: */*
Referer: http://127.0.0.1:8080/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Header respons
HTTP/1.1 401 Unauthorized
Server: nginx/1.1.19
Date: Fri, 16 Aug 2013 01:29:21 GMT
Content-Type: text/html
Content-Length: 597
Connection: keep-alive
WWW-Authenticate: Basic realm="Restricted"
Saya kira konfigurasi servernya bagus karena saya dapat mengakses API dari Klien REST Lanjutan (Ekstensi Chrome)
Ada saran?
PD: Header yang saya dapatkan dari klien REST Lanjutan adalah:
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
Authorization: Basic [REDACTED]
Content-Type: application/x-www-form-urlencoded
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
dan
Server: nginx/1.1.19
Date: Fri, 16 Aug 2013 01:07:18 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept, Cookie
Allow: POST, OPTIONS
X-Robots-Tag: noindex
mengirim metode OPTION
Jawaban:
Anda dapat memasukkan pengguna dan kata sandi sebagai bagian dari URL:
lihat URL ini, untuk lebih lanjut
Kredensial Otentikasi Dasar HTTP diteruskan dalam URL dan enkripsi
tentu saja, Anda memerlukan kata sandi nama pengguna, bukan
'Basic hashstring
.semoga ini membantu...
sumber
The use of these URLs is deprecated
Sesuai https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding dan http://en.wikipedia.org/wiki/Basic_access_authentication , berikut adalah cara melakukan Autentikasi dasar dengan tajuk memasukkan nama pengguna dan kata sandi di URL. Perhatikan bahwa ini masih tidak menyembunyikan nama pengguna atau kata sandi dari siapa pun yang memiliki akses ke jaringan atau kode JS ini (mis. Pengguna yang menjalankannya di browser):
sumber
Jawaban NodeJS:
Jika Anda ingin melakukannya dengan NodeJS: buat titik akhir GET ke JSON dengan
Authorization
header dan dapatkanPromise
kembali:Pertama
( lihat di npm ) dan kemudian di
.js
file Anda :sumber
Jika Anda berada di lingkungan browser, Anda juga dapat menggunakan btoa .
btoa
adalah fungsi yang mengambil string sebagai argumen dan menghasilkan string ASCII yang dikodekan Base64. Ini didukung oleh 97% browser .Contoh:
Anda kemudian dapat menambahkan
Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ=
keauthorization
header.Perhatikan bahwa peringatan biasa tentang autentikasi HTTP BASIC berlaku, yang paling penting jika Anda tidak mengirim lalu lintas melalui https, penyadapan dapat dengan mudah mendekode string yang dikodekan Base64 sehingga mendapatkan kata sandi Anda.
Jawaban security.stackexchange.com ini memberikan gambaran umum yang bagus tentang beberapa kelemahan.
sumber
tidak perlu menggunakan pengguna dan kata sandi sebagai bagian dari URL
kamu bisa mencoba ini
sumber