SSO กับ Active Directory ทำงานอย่างไรโดยที่ผู้ใช้เข้าสู่ระบบของเว็บแอปอินทราเน็ตอย่างโปร่งใส


40

ฉันบอกว่าเป็นไปได้ที่จะสร้างเว็บแอปพลิเคชันที่ไม่ต้องการการเข้าสู่ระบบ ผู้ใช้เข้าสู่ระบบ Windows ซึ่งรับรองความถูกต้องผ่านการค้นหา Active Directory (LDAP) จากนั้นพวกเขาควรจะสามารถไปที่เว็บแอพของฉันและไม่เห็นข้อความแจ้งการเข้าสู่ระบบ ลูกค้าเหล่านี้อ้างถึงสิ่งนี้ว่าการลงชื่อเพียงครั้งเดียว (อาจไม่ถูกต้องและเป็นส่วนหนึ่งของความสับสนของฉัน)

แต่จากสิ่งที่ฉันอ่าน Single Sign On จาก Tomcat docs คือ:

Single Sign On Valve จะถูกใช้เมื่อคุณต้องการให้ผู้ใช้สามารถลงชื่อเข้าใช้แอปพลิเคชันเว็บใด ๆ ที่เชื่อมโยงกับโฮสต์เสมือนของคุณจากนั้นให้มีการระบุตัวตนของพวกเขาโดยเว็บแอปพลิเคชันอื่น ๆ ทั้งหมดบนโฮสต์เสมือนเดียวกัน

ชัดเจนสำหรับฉันอย่างสมบูรณ์ ผู้ใช้จะต้องเข้าสู่ระบบครั้งเดียวและสามารถเข้าถึงเว็บแอพพลิเคชั่นทุกตัวบนอินสแตนซ์ของ Tomcat แต่สิ่งที่ฉันต้องทำก็คือให้พวกเขาเข้าสู่ระบบโดยไม่ต้องให้ข้อมูลประจำตัวใด ๆ กับเซิร์ฟเวอร์ Tomcat ของฉัน

ดังนั้นในการทำงานนี้ฉันจึงจินตนาการ:

  • ผู้ใช้ทำการร้องขอสำหรับบางหน้า
  • เซิร์ฟเวอร์ไม่เห็นโทเค็นเซสชันแล้วขอให้ไคลเอนต์สำหรับข้อมูลประจำตัวบางอย่าง
  • เบราว์เซอร์ไคลเอนต์โดยไม่มีการแทรกแซงจากผู้ใช้ให้ข้อมูลประจำตัวบางอย่างไปยังเซิร์ฟเวอร์
  • จากนั้นใช้ข้อมูลประจำตัวที่ได้รับจากเบราว์เซอร์ไคลเอนต์ซึ่งจะทำการค้นหาใน LDAP

ฉันเคยเห็นตัวอย่างบางส่วนที่ใช้ใบรับรองฝั่งไคลเอ็นต์ ... โดยเฉพาะอย่างยิ่งระบบ DoD PKI ซึ่งเหมาะสมสำหรับฉันเพราะในกรณีเหล่านั้นคุณกำหนดค่า Tomcat เพื่อร้องขอใบรับรองฝั่งไคลเอ็นต์แต่เพิ่งเข้าสู่ระบบ windows ฉันไม่เห็นว่าสิ่งนี้ จะใช้งานได้และข้อมูลใดที่เบราว์เซอร์จะส่งไปยังเซิร์ฟเวอร์ ฯลฯ นี่คือสิ่งที่ NTLM ใช้สำหรับ?

คำตอบ:


40

ก่อนอื่น - และในกรณีที่ผู้ใช้รายอื่นเข้าเยี่ยมชมหน้านี้ - มีวิธีการตรวจสอบสิทธิ์ที่อนุญาตให้คุณทำ SSO ได้ทันที เหล่านี้เป็นNTLMและKerberos LDAP - ในทางกลับกัน - จะไม่ให้ SSO กับคุณโดยทันที

NTLM แท้จริงแล้ว NTLMv1 และ NTLMv2 สิ่งเหล่านี้แตกต่างกันมากและ NTLMv1 เลิกใช้แล้วเนื่องจากปัญหาด้านความปลอดภัยที่ร้ายแรง คุณควรหลีกเลี่ยงโซลูชั่นการตรวจสอบความถูกต้องของ Java ที่ไม่สามารถระบุได้อย่างถูกต้องหากพวกเขาสนับสนุน NTLMv1 หรือ NTLMv2 เพราะพวกเขาใช้คำว่า "NTLM" ในเอกสารของพวกเขาเท่านั้น โอกาสเป็นผู้พัฒนาโซลูชั่นรักษาความปลอดภัยดังกล่าวไม่รู้จักตัวเองซึ่งเป็นเหตุผลที่ต้องมองหาทางหนีไฟ

ตรงกันข้ามกับความเชื่อดั้งเดิมทั้ง Microsoft NTLMv1 และ NTLMv2 นั้นมีเอกสารครบถ้วนโดย Microsoft แต่คุณจะยังคงหาวิธีแก้ปัญหาที่อ้างว่ามี 'reverse engineered' โปรโตคอล มันเป็นความจริงที่ว่าสิ่งนี้เป็นสิ่งจำเป็นก่อนที่ Microsoft จะทำเอกสารเกี่ยวกับโปรโตคอลที่ผมเชื่อว่าประมาณปี 2549 หรือ 2550 อย่างไรก็ตาม NTLMv1 นั้นไม่มีข้อแม้ ไม่มีอะไรผิดปกติกับ NTLMv2 ต่อครั้ง แต่ไมโครซอฟท์ได้ยุติการใช้งาน NTLM (ไม่ว่าในรูปแบบใด) ในทุกผลิตภัณฑ์ของตนเพื่อสนับสนุนการพิสูจน์ตัวตน Kerberos NTLMv1 นั้นใช้เวลานานและ NTLMv2 นั้นถูกใช้โดย Microsoft ในกรณีที่ไม่มี Domain Controller ให้เท่านั้น Bottom line: NTLM (ในรูปแบบใด ๆ ) ไม่ใช่ทางไปข้างหน้าจริงๆ เราควรคำนับ Microsoft ให้ใช้แนวทางตามมาตรฐานที่นี่

สิ่งนี้ทำให้คุณมี Kerberos Microsoft ได้สร้างโพรโทคอลสำหรับการเจรจาและขนส่งข้อมูลการรับรองความถูกต้องผ่าน HTTP นี้เป็นที่รู้จักในผลิตภัณฑ์ของไมโครซอฟท์เป็น " Integrated Windows Authentication " แต่ได้รับการตอกลงเป็นมาตรฐานอย่างเป็นทางการภายใต้ชื่อของSPNEGO นี่คือสิ่งที่คุณควรมองหา SPNEGO สนับสนุนทั้ง NTLMv2 และ Kerberos เป็นกลไกการพิสูจน์ตัวตนพื้นฐาน แต่ด้วยเหตุผลข้างต้นคุณควรกำหนดเป้าหมาย Kerberos มากกว่า NTLMv2

ผมเคยประสบความสำเร็จในการใช้งานแบบบูรณาการ Tomcat หลายคน (ที่ทำงานบนลินุกซ์ / Solaris) กับ Active Directory โดยใช้โครงการ SPNEGO ที่ SourceForge ฉันพบว่านี่เป็นวิธีที่ง่ายที่สุด สิ่งนี้จะช่วยให้คุณได้ SSO โดยทันทีเหมือนกับสิ่งที่เซิร์ฟเวอร์ Sharepoint ทำ นี่เป็นสิ่งที่ผู้ใช้ของคุณคาดหวังมากที่สุดเมื่อพูดถึง 'SSO' การทำให้การกำหนดค่า Kerberos ถูกต้องการสร้างคีย์และการตั้งค่าบัญชี 'จำลอง' ใน Active Directory อาจเป็นเรื่องยุ่งยาก แต่เมื่อคุณเข้าใจถูกต้องแล้วมันจะทำงานได้อย่างมีเสน่ห์

สิ่งเดียวที่ฉันไม่ชอบเกี่ยวกับโครงการ SPNEGO ที่ SourceForgeคือฉันไม่เข้าใจความถี่ในการตรวจสอบสิทธิ์ ความสงสัยที่น่ารังเกียจของฉันคือมันใช้สำหรับทุกการดูหน้าเว็บมากกว่าหนึ่งครั้งสำหรับแต่ละเซสชัน บางทีฉันผิดในนี้ อย่างไรก็ตาม: สิ่งนี้ชี้ให้เห็นอีกสิ่งหนึ่งที่ควรพิจารณาในโซลูชัน SSO: คุณไม่ต้องการใช้โซลูชันที่ 'หลอกลวง' ผู้ให้บริการข้อมูลประจำตัวของคุณ (พูด Active Directory) ด้วยคำขอที่ไม่จำเป็น


2
ขอบคุณทำให้คำตอบนี้ได้รับการยอมรับ สิ่งหนึ่งที่จะเพิ่มในรายการการเข้าสู่ระบบที่รวดเร็วของคุณคือการเข้าสู่ระบบใบรับรอง x509 ... เช่นเดียวกับบัตร CAC ของรัฐบาล
blak3r

นี่คือคำตอบที่ยอดเยี่ยมแม้ว่ามันจะอายุ 6 ขวบ! ฉันอยากโหวต x10 ถ้าทำได้!
ทิมเอส.

2

ในสภาพแวดล้อม Windows Active Directory การลงชื่อเข้าใช้ครั้งเดียวใช้เพื่อหมายถึงการเยี่ยมชมหน้าเว็บภายในมีสิทธิ์การเข้าสู่ระบบ Windows ของคุณและเว็บเซิร์ฟเวอร์สามารถดำเนินการได้ มันเป็นสิ่งที่ NTLM ใช้สำหรับ แต่การใช้งานที่ใหม่กว่าใช้ Kerberos แทน

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

นี่คือเอกสาร Microsoft ที่อธิบายวิธีการตรวจสอบสิทธิ์ Kerberos ทำงานกับเว็บเซิร์ฟเวอร์ที่ใช้ IIS / ASP.Net: http://msdn.microsoft.com/en-us/library/ff647076.aspx

มันเป็นไปได้ที่จะทำกับ Apache / Tomcat / Java นี่คือ PDF ที่อธิบายถึงการนำไปปฏิบัติของมหาวิทยาลัยในสหราชอาณาจักร: http://gfivo.ncl.ac.uk/documents/UsingKerberosticketsfortrueSingleSignOn.pdfและโครงการ Codeplex สำหรับมัน: http://tomcatspnego.codeplex.com/และ Openfire มีบางอย่าง เอกสารเกี่ยวกับการทำงานกับ Java / Kerberos โดยทั่วไปที่นี่ ( http://community.igniterealtime.org/docs/DOC-1060 )


0

ดูเหมือนว่าคุณกำลังอธิบายสิ่งที่ Microsoft อ้างถึงว่าเป็น Windows Authentication แบบรวม

ดูเหมือนว่า Tomcat ไม่สนับสนุน Windows Authentication บนพื้นฐานของบทความนี้


-1

สำหรับผู้เริ่มต้นคุณไม่สามารถหลีกเลี่ยงการเข้าสู่ระบบได้ หากคุณต้องการระบุผู้ใช้คุณต้องลงชื่อเข้าใช้ ลืม NTLM แล้ว Kerberos เข้ามาช่วยเหลือ - มันสามารถทำทุกอย่างได้อย่างโปร่งใส

SingleSignOnValve ไม่ใช่สิ่งที่คุณกำลังมองหา ถ้าคุณใช้ Tomcat 7 คุณสามารถใช้SpnegoAuthenticatorทันที แต่เมื่อวันที่ 6 คุณต้องใช้นี้


สับสนเล็กน้อย ... ประโยคแรกและประโยคที่สองดูเหมือนจะขัดแย้งกัน ด้วย Kerberos ผู้ใช้จะไม่ได้รับแจ้งให้ลงชื่อเข้าใช้หรือ
blak3r

1
ไม่พวกเขาทำไม่ได้ ดูภาพรวมขอบคุณ Kerberos ที่ผู้ใช้ป้อนข้อมูลรับรองของเขาครั้งเดียวด้วยตนเองและหลังจากนั้นการลงชื่อเข้าใช้ทุกครั้งจะเกิดขึ้นโดยอัตโนมัติในนามของเขา นี่ไม่ได้หมายความว่าจะไม่มีการลงชื่อเข้าใช้เลย นี่คือสิ่งที่คุณเขียน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.