Cara menyambung ke HTTP Rest API yang mengautentikasi dengan LDAP

Saya sedang menulis skrip Ruby untuk terhubung ke situs web REST API. Situs web diautentikasi menggunakan LDAP / SSO menggunakan kredensial AD, sehingga tidak ada otentikasi dasar atau pengguna/kata sandi yang harus diberikan.

Ini adalah kode sejauh ini:

resource_http = Net::HTTP.new(webserver.company.com, 443)
resource_http.use_ssl = true
resource_http.verify_mode = OpenSSL::SSL::VERIFY_NONE
resource_request = Net::HTTP::Post.new("/api/endpoint")
resource_request.set_form_data({"chocolate"=>"yes","beer"=>"yes"})
resource_response = resource_http.request(resource_request)

Tapi saya menerima kesalahan otorisasi:

Net::HTTPUnauthorized 401 Authorization Required

Bermain dengan Net::LDAP, saya dapat mengautentikasi kredensial saya di komputer saya:

ldap = Net::LDAP.new
ldap.host = "ldap.company.com"
ldap.port = "389"
ldap.auth "[email protected]", "password"
ldap.bind

Tapi saya tidak tahu cara "melampirkan" atau meneruskan info LDAP ini dalam permintaan HTTP.

Semua pencarian Google saya mengarahkan saya untuk mengaktifkan SSO/otentikasi pada aplikasi situs web, tetapi saya tidak mencoba melakukan itu, saya ingin terhubung dengan skrip Ruby saya ke situs web terotentikasi LDAP yang ada.

Pembaruan #1 Beberapa forum Ruby mengarahkan saya ke permata HTTPI dan menggunakan adaptor 'batas'. Adaptor ini bergantung pada perpustakaan Curl untuk menangani otentikasi Kerberos/SPNEGO. Namun saya tidak dapat membuat penginstal tepi jalan berfungsi dengan perpustakaan curl yang mereka tautkan di situs web mereka (untuk komputer Windows).

Saya memindahkan kode ke Python menggunakan modul kerberos. Saya dapat membuat tiket dan menambahkannya pada header permintaan HTTP, yang diautentikasi oleh REST API dan mengembalikan data yang saya inginkan.

Saya masih belajar, jadi meskipun kode saya berfungsi di Python, saya ingin membuatnya berfungsi di Ruby.

Contoh kode dengan Python: https://Gist.github.com/DevOpsCow/d374300304d7beef8a03


person Moo    schedule 03.02.2016    source sumber
comment
Selamat datang di Stack Overflow. Ini sedikit nasehatnya: Jangan bilang itu pertanyaan bodoh lalu dorong kami untuk bersikap lembut. Ajukan pertanyaan yang bagus, pastikan Anda telah melakukan riset dan memberikan informasi yang diperlukan. meta.stackoverflow.com/q/261592/128421 dan tinyurl.com/stack-hints dan catb.org/esr/faqs/smart-questions.html adalah bacaan yang bagus.   -  person the Tin Man    schedule 04.02.2016


Jawaban (3)


Ada banyak cara untuk meneruskan kredensial melalui HTTP. Saya akan terkejut jika REST API mengizinkan Anda meneruskan informasi host/port server LDAP Anda (ini bisa menjadi lubang keamanan yang sangat besar). Skenario yang paling mungkin adalah Anda perlu memberikan nama pengguna dan kata sandi dalam bentuk yang diharapkan oleh REST API. REST API kemudian akan melakukan otentikasi ke server LDAP dan bergantung pada hasil otentikasi, Anda akan mendapatkan kembali respons/status yang sesuai dari REST API.

Singkat cerita, Anda perlu mendapatkan informasi dari administrator REST API (atau dari dokumentasi API) untuk melihat bagaimana Anda diharapkan mengautentikasi melalui HTTP.

Semoga membantu.

person Bertold Kolics    schedule 04.02.2016

Ketika Anda mendapatkan 401 Authorization required, server juga harus menyediakan www-authenticate-Header yang berisi informasi lebih lanjut tentang cara mengautentikasi. Lihatlah itu dan periksa informasi yang diberikan.

person heiglandreas    schedule 04.02.2016

Saya tidak tahu apakah ini membantu, saya mencoba menggunakan tukang pos untuk mengirim otentikasi terhadap API yang menggunakan LDAP. Salah satu pengembang senjata tempat saya bekerja membantu saya, akhirnya saya harus menggunakan DOMAIN\nama pengguna di bidang nama pengguna. Itu berhasil setelah itu.

person PvO    schedule 22.02.2019
comment
Mungkin tampilkan beberapa cuplikan kode di sini? -- yang akan membantu orang lain untuk memahami hal ini dengan lebih jelas. - person Tiw; 22.02.2019