2011-12-06 25 views
8

Những gì tôi đang cố gắng để làm:Disable Đăng nhập Prompts trong mod_auth_sspi_1.0.4-2.2.2

  • Tạo một trang chủ trên mạng nội bộ của công ty chúng tôi có thể tự động lấy các đăng nhập trong Windows tên người dùng của người xem trang mà không cần người được nhắc nhập thông tin xác thực này khi trang tải.

  • Hiện tại, tôi chỉ muốn nó lấy tên người dùng cục bộ, vì sẽ mất một lúc trước khi các nhân viên CNTT của chúng tôi có thiết lập tên miền. Ví dụ, ngay bây giờ tôi muốn nó nắm bắt "(PC-Name) \ windows.user.name" mà không có bất kỳ lời nhắc nào.

Môi trường:

  • Apache 2.2.21 trên Windows 7 x64 (sẽ được trên CentOS khi nó trong sản xuất).

  • PHP 5.3.8 (VC9-ZTS).

  • Internet Explorer 9.0.8x và Firefox 6.0.2 (sẽ lo lắng về Chrome sau này).

  • Trang thử nghiệm hiện tại chỉ là một tập lệnh PHP gọi print_r ($ _SERVER).

  • Để đơn giản, thư mục tôi đang thử nghiệm này không phải là VirtualHost.

bước tôi đã lấy vậy, đến nay:

  • Downloaded mod_sspi_1.0.4-2.2.2 từ SourceForge và trích xuất mod_auth_sspi.so để Apache module thư mục.

  • gia tăng việc kê khai module:

    module LoadModule sspi_auth_module/mod_auth_sspi.so

  • Added định nghĩa thư mục:

    AllowOverride None Tùy chọn None Đặt hàng cho phép, từ chối Allow from all

    AuthName "My Intranet" 
    AuthType SSPI 
    SSPIAuth On 
    SSPIAuthoritative Off 
    
    require valid-user 
    

  • Bật xác thực tích hợp trong Firefox bằng cách đi tới about: config và đặt mạng.automatic-ntlm-auth.trusted-uris thành đường dẫn URL tuyệt đối của tập lệnh PHP rồi khởi động lại Firefox.

  • Tôi chưa thực hiện bước tương đương trong IE nhưng tôi sẽ một khi tôi nhận Firefox hoạt động vì đó là trình duyệt được hỗ trợ chính của chúng tôi trong nội bộ.

  • Apache khởi động lại và cố gắng tải tập lệnh PHP thử nghiệm.

Kết quả:

  • Trong cả IE và Firefox, tôi nhận được nhắc nhở cho một tên người dùng và mật khẩu trước khi tải trang. Tôi không muốn lời nhắc đó. Tôi muốn tên người dùng được phát hiện tự động mà không có lời nhắc.

đáp thắc mắc vậy, đến nay:

  • Tôi đã thử đi xe đạp qua các tùy chọn SSPI khác nhau, chẳng hạn như authritative on/off và không có điều gì. Không có hiệu lực.

  • Lời nhắc không còn xuất hiện nếu tôi xóa "yêu cầu người dùng hợp lệ", nhưng sau đó tên người dùng không được chuyển, hoặc (nó không phải là NULL; không được đặt trong khoảng thời gian mảng).

  • Nếu tôi nhấn "Hủy" trên lời nhắc, tôi sẽ nhận trang "Yêu cầu xác thực" chuẩn.

  • Nếu tôi nhập tên người dùng không hợp lệ hoặc tên người dùng chính xác nhưng sai mật khẩu, trang sẽ tải nhưng tên người dùng sẽ là "(PC-Name) \ Guest".

  • Nếu tôi nhập đúng tên người dùng/mật khẩu, thì tên người dùng được hiển thị thay cho Khách.

  • Khi tôi nhập tên người dùng/mật khẩu trong IE hoặc Firefox, trình duyệt sẽ nhớ tên người dùng đó trên trang tiếp theo tải cho đến khi tôi xóa bộ đệm mật khẩu đã lưu trữ hoặc khởi động lại trình duyệt.

  • Tôi đã dành 3 giờ hoặc lâu hơn để đoán Googling và ngẫu nhiên. Zero thành công. Tôi đã tìm thấy một vài bài đăng trên diễn đàn bị cô lập của những người hỏi câu hỏi này, nhưng họ đã không trả lời hoặc cung cấp các giải pháp mà tôi đã thử mà không thành công.

Một lần nữa, điều tôi muốn cho trang tải, KHÔNG có bất kỳ lời nhắc nào và hiển thị tên người dùng Windows hiện đã đăng nhập trong đầu ra mảng $ _SERVER.

Theo như tôi có thể hiểu, đây là một trong hai: Sự cố cấu hình Windows, sự cố cấu hình Apache hoặc sự cố cấu hình trình duyệt. Ngoài ra, tôi mới ra khỏi ý tưởng.

Tôi sẽ rất biết ơn vì bất kỳ trợ giúp nào bạn có thể cung cấp. Cảm ơn!

--Kris

+0

Xin lỗi đã không đọc ở trên hoàn toàn, bạn đang làm việc trên một trạm cửa sổ. – ehime

Trả lời

7

Took một vài ngày, nhưng tôi cuối cùng figured it out trên của riêng tôi. Rõ ràng, các tài liệu và hướng dẫn khác nhau ở đó mô tả Firefox về: thiết lập cấu hình là sai. Họ tuyên bố rằng URI đầy đủ, bao gồm tiền tố giao thức, phải được bao gồm. Khi nó quay ra, điều ngược lại là đúng.

Như một shot ngẫu nhiên trong bóng tối, tôi cố gắng thiết lập nó để chỉ "localhost" (tên miền máy chủ thử nghiệm của chạy trên). Và Voila! Điều đó cố định nó! "http: // localhost", mặt khác, khiến nó bị hỏng.

Một khi tôi nhận nó làm việc trong Firefox, sau khi xác minh rằng cấu hình server-side là đúng, áp dụng nó cho IE và Chrome được một cinch. Đối với IE, tôi chỉ cần thêm "http: // localhost" (trong trường hợp này, bạn muốn tiền tố giao thức) vào vùng "Intranet". Và vì Chrome sử dụng cùng một cài đặt mạng mà IE sử dụng, bước đó làm cho nó hoạt động cho cả hai trình duyệt.

As far as server-side cấu hình đi, có vẻ như tôi đã có ngay từ đầu. Tôi đã có thể đơn giản hóa nó một chút, tuy nhiên, để thực sự tất cả các bạn cần trong khối thư mục là:

AuthName "Whatever you want to call your intranet" 
AuthType SSPI 
SSPIAuth On 

require valid-user 

Với thiết lập này, nếu bạn trỏ đến một kịch bản PHP làm một print_r ($ _SERVER), các đầu ra sẽ chứa một cái gì đó như thế này:

[REMOTE_USER] => dev-kdc-pc01\kris.craig 
[AUTH_TYPE] => NTLM 
[PHP_AUTH_USER] => dev-kdc-pc01\kris.craig 

Nếu bạn muốn thoát khỏi phần miền (tức là "dev-kdc-pc01 \"), bạn có thể phân tích nó ra trong PHP hoặc thêm dòng này vào thứ SSPI của bạn trong khối thư mục trong httpd.conf đề cập ở trên:

SSPIOmitDomain On 

Xin lưu ý rằng tôi đã chỉ kiểm tra điều này trên một hệ thống Windows nơi máy chủ web Apache đang chạy trên máy chủ cục bộ. Tôi chưa thử nghiệm nó trong một tình huống mà máy chủ Apache đang chạy trên Linux, mặc dù điều đó không nên có bất kỳ tác động nào đến kết quả vì máy chủ chỉ chấp nhận bất kỳ trình duyệt nào gửi nó. Điều này cũng yêu cầu máy khách phải chạy Windows hoặc một số môi trường tương thích với SSPI khác. Tôi chưa xác định cách thực hiện công việc này cho nhân viên sử dụng Mac của chúng tôi.

Cũng lưu ý rằng tôi đã thử nghiệm thành công tính năng này trên mạng có không hiện có miền được định cấu hình. Theo các bài báo được xuất bản ở nơi khác, hành vi phải giống hệt nhau trên một máy trạm là thành viên của một miền.

Tôi hy vọng điều này sẽ hữu ích! Cảm ơn!

+0

Đã thử mọi thứ, giải pháp của bạn cũng không giúp tôi ... – Somnium

0

Đây có thể là câu trả lời một phần.

BOOL WINAPI GetUserName(
    __out LPTSTR lpBuffer, 
    __inout LPDWORD lpnSize 
); 

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724432%28v=vs.85%29.aspx

Dường như bạn có thể lấy thông tin hệ thống sử dụng này, nửa còn lại có thể là tự động hoá nó bằng cách sử PERL hay Python để cạo các thông tin, sau đó gửi nó đến PHP.

Đây là đường viền khi tìm nạp SysInfo trong Windows.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724426%28v=vs.85%29.aspx

Thành thực mà nói đây là một điều khá dễ dàng để làm với PECL/PAM nếu bạn đang sử dụng Linux.

+0

Tuy nhiên, điều này không phải là chạy phía máy khách? Máy chủ cuối cùng sẽ chạy CentOS và về cơ bản sẽ chấp nhận bất cứ điều gì mà trình duyệt yêu cầu các thông tin đăng nhập. –