วิธีเชื่อมต่อกับ HTTP Rest API ที่ตรวจสอบสิทธิ์กับ LDAP

ฉันกำลังเขียนสคริปต์ Ruby เพื่อเชื่อมต่อกับเว็บไซต์ REST API เว็บไซต์ได้รับการตรวจสอบสิทธิ์โดยใช้ LDAP / SSO โดยใช้ข้อมูลรับรอง AD ดังนั้นจึงไม่จำเป็นต้องระบุการตรวจสอบสิทธิ์หรือผู้ใช้/รหัสผ่านขั้นพื้นฐาน

นี่คือรหัสจนถึงตอนนี้:

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)

แต่ฉันได้รับข้อผิดพลาดในการอนุญาต:

Net::HTTPUnauthorized 401 Authorization Required

เมื่อเล่นกับ Net::LDAP ฉันสามารถตรวจสอบข้อมูลรับรองของฉันบนคอมพิวเตอร์ของฉันได้:

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

แต่ฉันไม่รู้ว่าจะ "แนบ" หรือส่งข้อมูล LDAP นี้ในคำขอ HTTP ได้อย่างไร

การค้นหาโดย Google ทั้งหมดชี้ให้ฉันเปิดใช้งาน SSO/การรับรองความถูกต้องบนแอปเว็บไซต์ แต่ฉันไม่ได้พยายามทำเช่นนั้น ฉันต้องการเชื่อมต่อกับสคริปต์ Ruby ของฉันกับเว็บไซต์ที่ได้รับการตรวจสอบสิทธิ์ LDAP ที่มีอยู่

อัปเดต #1 ฟอรัม Ruby บางแห่งชี้ให้ฉันไปที่ gem HTTPI และใช้อะแดปเตอร์ 'curb' อะแดปเตอร์นี้อาศัยไลบรารี Curl เพื่อจัดการการรับรองความถูกต้อง Kerberos/SPNEGO อย่างไรก็ตาม ฉันไม่สามารถทำให้ตัวติดตั้งขอบถนนทำงานกับไลบรารี curl ที่พวกเขาลิงก์บนเว็บไซต์ได้ (สำหรับคอมพิวเตอร์ Windows)

ฉันย้ายโค้ดไปที่ Python โดยใช้โมดูล Kerberos ฉันสามารถสร้างตั๋วและต่อท้ายส่วนหัวคำขอ HTTP ซึ่งได้รับการตรวจสอบสิทธิ์โดย REST API และส่งคืนข้อมูลที่ฉันต้องการ

ฉันยังคงเรียนรู้อยู่ ดังนั้นแม้ว่าโค้ดของฉันจะใช้งานได้บน Python ฉันก็อยากจะทำให้มันใช้งานได้บน Ruby

โค้ดตัวอย่างใน Python: https://gist.github.com/DevOpsCow/d374300304d7beef8a03


person Moo    schedule 03.02.2016    source แหล่งที่มา
comment
ยินดีต้อนรับสู่ Stack Overflow คำแนะนำเล็กๆ น้อยๆ: อย่าบอกว่ามันเป็นคำถามโง่ๆ แล้วกระตุ้นให้เราสุภาพ ถามคำถามที่ดี ตรวจสอบให้แน่ใจว่าคุณได้ทำการวิจัยและให้ข้อมูลที่จำเป็นแล้ว meta.stackoverflow.com/q/261592/128421 และ tinyurl.com/stack-hints และ catb.org/esr/faqs/smart-questions.html เป็นการอ่านที่ดี   -  person the Tin Man    schedule 04.02.2016


คำตอบ (3)


คุณสามารถส่งข้อมูลรับรองผ่าน HTTP ได้หลายวิธี ฉันจะแปลกใจถ้า REST API อนุญาตให้คุณส่งข้อมูลโฮสต์/พอร์ตของเซิร์ฟเวอร์ LDAP ของคุณ (ซึ่งอาจเป็นช่องโหว่ด้านความปลอดภัยขนาดใหญ่) สถานการณ์ที่เป็นไปได้มากที่สุดคือคุณต้องระบุชื่อผู้ใช้และรหัสผ่านในรูปแบบที่ REST API คาดหวัง จากนั้น REST API จะดำเนินการตรวจสอบสิทธิ์ไปยังเซิร์ฟเวอร์ LDAP และคุณจะได้รับการตอบสนอง/สถานะที่เกี่ยวข้องจาก REST API กลับไป ทั้งนี้ขึ้นอยู่กับผลการตรวจสอบสิทธิ์

เรื่องสั้นสั้น คุณต้องได้รับข้อมูลจากผู้ดูแลระบบของ REST API (หรือจากเอกสารประกอบ API) เพื่อดูว่าคุณคาดหวังการตรวจสอบสิทธิ์ผ่าน HTTP อย่างไร

ฉันหวังว่านี่จะช่วยได้.

person Bertold Kolics    schedule 04.02.2016

เมื่อคุณได้รับ 401 Authorization required เซิร์ฟเวอร์จะต้องจัดเตรียม www-authenticate-Header ที่มีข้อมูลเพิ่มเติมเกี่ยวกับวิธีการตรวจสอบสิทธิ์ มองหาสิ่งนั้นและตรวจสอบข้อมูลที่ให้ไว้

person heiglandreas    schedule 04.02.2016

ฉันไม่รู้ว่าสิ่งนี้ช่วยได้ไหม ฉันพยายามใช้บุรุษไปรษณีย์เพื่อส่งการรับรองความถูกต้องกับ API ที่ใช้ LDAP นักพัฒนาปืนคนหนึ่งที่ฉันทำงานด้วยช่วยฉันไว้ แต่สุดท้ายฉันก็ต้องใช้ DOMAIN\username ในช่องชื่อผู้ใช้ มันได้ผลหลังจากนั้น

person PvO    schedule 22.02.2019
comment
อาจแสดงข้อมูลโค้ดบางส่วนที่นี่ -- ที่จะช่วยให้ผู้อื่นเข้าใจเรื่องนี้ได้ชัดเจนยิ่งขึ้น - person Tiw; 22.02.2019