ในการกำหนดค่า SPNEGO ของ Jetty มีสามชื่อ ได้แก่ URI ที่ใช้จับคู่การตรวจสอบสิทธิ์ ผู้ใช้ที่ลงชื่อเข้าใช้ผ่าน JAAS และบริการที่ขอตั๋ว แต่ละชื่อมีจุดประสงค์ต่างกัน

สำหรับการใช้งาน Jetty 12.0.x ส่วนของอ็อบเจกต์การตรวจสอบสิทธิ์มีดังนี้:

var auth = new org.eclipse.jetty.client.SPNEGOAuthentication(
    java.net.URI.create("http://proxy.example:8080"));
auth.setServiceName("HTTP");

ส่วนนี้แสดงองค์ประกอบบริการ ไม่ใช่สูตรการตรวจสอบสิทธิ์ผ่าน proxy ที่สมบูรณ์ การลงชื่อเข้าใช้ JAAS การกำหนดเส้นทาง proxy และการแลกเปลี่ยนการตรวจสอบสิทธิ์ของคำขอแยกจากกัน

ในการใช้งานนี้ Jetty สร้างชื่อ GSS ที่อิงโฮสต์โดยรวม getServiceName() อักขระ @ และโฮสต์สำหรับการแลกเปลี่ยนการตรวจสอบสิทธิ์ หากให้ [email protected] เป็นองค์ประกอบบริการ จะมีโฮสต์เพิ่มอีกหนึ่ง อ่านสัญญาของ setter นี้แทนการสันนิษฐานว่ารับ principal ของ Kerberos ทั้งหมด

ชื่อ GSS ที่ได้มีรูปแบบเชิงแนวคิด HTTP@hostname principal ของบริการที่สอดคล้องใน KDC มักแสดงเป็น HTTP/hostname ชื่อ proxy ที่เลือกต้องตรงกับบริการที่ลงทะเบียนจริง สำหรับบัญชีนั้น ที่อยู่ IP หรือนามแฝงอาจเลือกเป้าหมายตั๋วอื่น

ตรวจสอบเส้นทาง 407 ด้วย

ใน Jetty 12.0.x authenticate() ดึงชื่อโฮสต์ GSS จาก request.getHost() และสร้างผลลัพธ์ด้วยส่วนหัว Authorization ที่เป็นค่าเริ่มต้น การจับคู่อ็อบเจกต์การตรวจสอบสิทธิ์ตาม proxy URI ไม่ได้เปลี่ยนตัวเลือกเหล่านั้นเป็นชื่อโฮสต์ของ proxy และ Proxy-Authorization ด้วยตัวเอง

ดังนั้นการเชื่อมต่อ proxy ต้องใช้โฮสต์ของคำขอที่ถูกต้องและผลลัพธ์ที่จำกัดขอบเขต proxy สำหรับการแลกเปลี่ยนนั้น คำขอ HTTPS CONNECT และคำขอต้นทางทั่วไปอาจมีค่าโฮสต์ต่างกัน ยืนยันพฤติกรรมของการใช้งานที่ติดตั้งไว้แทนการสันนิษฐานว่า setter ชื่อบริการให้โฟลว์ 407 ทั้งหมด

สำหรับ 407 ให้ตรวจสอบการแลกเปลี่ยนการตรวจสอบสิทธิ์ของ proxy และโฮสต์ที่คำขอนั้นใช้ 401 เป็นของการตรวจสอบสิทธิ์ต้นทาง ตั๋วผู้ใช้ที่ถูกต้องเพียงอย่างเดียวไม่ได้พิสูจน์ว่า Jetty ขอตั๋วบริการที่ถูกต้องหรือตัวกลางยอมรับตั๋วนั้น

บทความที่เกี่ยวข้อง