ฉันกำลังเขียนสคริปต์ 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