SSO với Active Directory hoạt động như thế nào theo đó người dùng đăng nhập một cách trong suốt vào một ứng dụng web mạng nội bộ?


40

Tôi đã nói rằng có thể tạo một ứng dụng web không yêu cầu đăng nhập. Người dùng đăng nhập vào Windows, xác thực thông qua Tra cứu Active Directory (LDAP). Sau đó, họ sẽ có thể truy cập ứng dụng web của tôi và không bao giờ thấy lời nhắc đăng nhập. Những khách hàng này đã coi đây là Đăng nhập một lần (có lẽ không chính xác và là một phần của sự nhầm lẫn của tôi).

Nhưng, từ những gì tôi đọc Đăng nhập một lần từ các tài liệu Tomcat là:

Van đăng nhập một lần được sử dụng khi bạn muốn cung cấp cho người dùng khả năng đăng nhập vào bất kỳ ứng dụng web nào được liên kết với máy chủ ảo của bạn và sau đó nhận dạng danh tính của họ bởi tất cả các ứng dụng web khác trên cùng một máy chủ ảo.

Điều này là hoàn toàn rõ ràng với tôi. Người dùng phải đăng nhập một lần và có thể truy cập mọi ứng dụng web trên một ví dụ của tomcat. Nhưng, những gì tôi cần làm là bằng cách nào đó cho phép họ đăng nhập mà không bao giờ cung cấp bất kỳ thông tin đăng nhập nào cho máy chủ tomcat của tôi.

Vì vậy, để làm việc này, tôi tưởng tượng:

  • Người dùng đưa ra yêu cầu cho một số trang
  • Máy chủ thấy không có mã thông báo phiên và sau đó yêu cầu khách hàng cho một số thông tin đăng nhập.
  • Trình duyệt máy khách mà không có bất kỳ sự can thiệp nào từ người dùng cung cấp một số thông tin đăng nhập cho máy chủ.
  • Sau đó, bằng cách sử dụng các thông tin đăng nhập được cung cấp bởi trình duyệt máy khách, nó sẽ tra cứu LDAP.

Tôi đã thấy một số ví dụ sử dụng chứng chỉ phía máy khách ... đặc biệt là hệ thống PKI DoD có ý nghĩa với tôi bởi vì trong những trường hợp đó, bạn định cấu hình Tomcat để yêu cầu certs phía máy khách , nhưng chỉ cần đăng nhập vào cửa sổ Tôi không thấy điều này sẽ hoạt động và thông tin nào trình duyệt sẽ chuyển đến máy chủ, v.v ... Đây có phải là những gì NTLM được sử dụng cho?

Câu trả lời:


40

Trước hết - và trong trường hợp người dùng khác tình cờ truy cập trang này - chỉ có một số phương thức xác thực nhất định cho phép bạn thực hiện SSO nhanh chóng. Đây là NTLMKerberos . LDAP - mặt khác - sẽ không bao giờ cung cấp cho bạn SSO nhanh chóng.

NTLM thực sự là NTLMv1 và NTLMv2. Đây là rất khác nhau và NTLMv1 không được chấp nhận vì các vấn đề bảo mật nghiêm trọng. Bạn nên tránh các giải pháp xác thực Java không xác định chính xác nếu chúng hỗ trợ NTLMv1 hoặc NTLMv2 vì chúng chỉ sử dụng từ "NTLM" trong tài liệu của chúng. Có thể các nhà phát triển của giải pháp bảo mật đã nói không biết chính họ là lý do nhiều hơn để tìm kiếm lối thoát lửa.

Trái với niềm tin truyền thống, cả NTLMv1 và NTLMv2 đều được Microsoft ghi lại đầy đủ nhưng bạn vẫn sẽ tìm thấy các giải pháp tuyên bố đã 'đảo ngược' giao thức. Đúng là điều này là cần thiết trước khi Microsoft ghi lại các giao thức mà tôi tin vào khoảng năm 2006 hoặc năm 2007 Dù sao thì NTLMv1 là không có. Không có gì sai với NTLMv2 mỗi lần nhưng Microsoft đã loại bỏ NTLM (dưới bất kỳ hình thức nào) trong tất cả các sản phẩm của mình để ủng hộ xác thực Kerberos. NTLMv1 đã chết từ lâu và NTLMv2 hiện chỉ được Microsoft sử dụng trong trường hợp không có Bộ điều khiển miền khả dụng. Điểm mấu chốt: NTLM (dưới bất kỳ hình thức nào) không thực sự là con đường phía trước. Chúng ta thực sự nên chào Microsoft vì đã thực hiện một cách tiếp cận dựa trên các tiêu chuẩn ở đây.

Điều này để lại cho bạn với Kerberos. Microsoft đã tạo ra một giao thức để đàm phán và vận chuyển thông tin xác thực qua HTTP. Điều này được biết đến trong các sản phẩm của Microsoft là " Xác thực Windows tích hợp " nhưng nó đã được đóng đinh như một tiêu chuẩn chính thức dưới tên SPNEGO . Đây là những gì bạn nên tìm kiếm. SPNEGO hỗ trợ cả NTLMv2 và Kerberos làm cơ chế xác thực cơ bản nhưng vì những lý do trên, bạn nên nhắm mục tiêu Kerberos thay vì NTLMv2.

Tôi đã tích hợp thành công một số ứng dụng Tomcat (chạy trên Linux / Solaris) với Active Directory bằng Dự án SPNEGO tại SourceForge . Tôi đã thấy đây là cách tiếp cận đơn giản nhất. Điều này cung cấp cho bạn SSO nhanh chóng tương tự như những gì máy chủ Sharepoint làm. Đây rất có thể là những gì người dùng của bạn sẽ mong đợi khi nói về 'SSO'. Bắt đúng cấu hình Kerberos, tạo khóa và thiết lập tài khoản 'giả' trong Active Directory có thể là một rắc rối nhưng một khi bạn hiểu đúng, nó hoạt động như một bùa mê.

Điều duy nhất tôi không thích về Dự án SPNEGO tại SourceForge là tôi không hiểu tần suất thực hiện xác thực. Sự nghi ngờ khó chịu của tôi là nó làm điều đó cho mọi lượt xem trang hơn là một lần cho mỗi phiên. Có lẽ tôi đã sai trong việc này. Dù sao: điều này nêu bật một điều cần xem xét trong các giải pháp SSO: bạn không muốn triển khai một giải pháp 'spam' nhà cung cấp nhận dạng của bạn (nói Active Directory) với các yêu cầu không cần thiết.


2
Cảm ơn, làm cho câu trả lời được chấp nhận. Một điều cần thêm vào danh sách đăng nhập nhanh chóng của bạn là đăng nhập chứng chỉ x509 ... Giống như thẻ CAC của chính phủ.
blak3r

Đây là một câu trả lời tuyệt vời, ngay cả khi nó 6 tuổi! Tôi sẽ nâng cấp x10 nếu có thể!
Tim S.

2

Trong môi trường Windows Active Directory, Đăng nhập một lần được sử dụng để truy cập một trang web nội bộ mang theo quyền đăng nhập Windows của bạn và máy chủ web có thể hành động theo chúng. Đó là một cái gì đó NTLM được sử dụng cho, nhưng các triển khai mới hơn sử dụng Kerberos thay thế.

Nếu bạn mở một trang web Sharepoint Server, nó sẽ biết bạn là ai mà không cần tên người dùng và mật khẩu đăng nhập, nhưng điều này chỉ hoạt động đối với các trang web nội bộ trên cùng một mạng, tôi không nghĩ nó hoạt động trên một trang web công cộng. (Tôi không thể biết bạn có nghĩa là "máy chủ ảo" như trong một vhost của Apache hay như trong một máy chủ được lưu trữ bên ngoài).

Dưới đây là tài liệu của Microsoft mô tả cách xác thực Kerberos hoạt động với máy chủ web chạy IIS / ASP.Net: http://msdn.microsoft.com/en-us/l Library / ff647076.aspx

Có vẻ như có thể làm với Apache / Tomcat / Java. Dưới đây là bản PDF mô tả một triển khai của Đại học Vương quốc Anh về điều đó: http://gfivo.ncl.ac.uk/document/UsingKerberosticketsfortrueSingleSignOn.pdf và một dự án Codeplex cho nó: http://tomcatspnego.codeplex.com/ và Openfire có một số tài liệu để làm với thường làm việc với Java / Kerberos tại đây ( http://community.igniterealtime.org/docs/DOC-1060 ).


0

Có vẻ như bạn đang mô tả những gì Microsoft gọi là Xác thực Windows tích hợp.

Có vẻ như Tomcat không hỗ trợ Windows xác thực, dựa trên bài viết này .


-1

Để bắt đầu, bạn không thể tránh đăng nhập. Nếu bạn muốn xác định người dùng, bạn phải đăng nhập cho họ. Quên NTLM, Kerberos đến giải cứu - nó có thể làm mọi thứ một cách hoàn toàn minh bạch.

SingleSignOnValve không phải là thứ bạn đang tìm kiếm. Nếu bạn sử dụng Tomcat 7, bạn có thể sử dụng SpnegoAuthenticator ngay lập tức nhưng trên 6 bạn phải sử dụng cái này .


Ít bối rối ... câu thứ nhất và thứ hai dường như mâu thuẫn. Với Kerberos, người dùng không được nhắc đăng nhập?
blak3r

1
Không, họ không có. Xem bức tranh lớn, nhờ Kerberos, người dùng nhập thông tin đăng nhập của mình một lần theo cách thủ công và sau đó mọi đăng nhập sẽ tự động thay mặt anh ta. Điều này không có nghĩa là không có đăng nhập xảy ra sau đó. Đây là những gì bạn đã viết.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.