Tôi có một ứng dụng web PHP trên mạng nội bộ có thể trích xuất IP và tên máy chủ của người dùng hiện tại trên trang đó, nhưng tôi tự hỏi có cách nào để lấy/trích xuất tên người dùng Active Directory/Windows của họ không. Điều này có thể không?Bạn có thể nhận được tên người dùng Windows (AD) trong PHP không?
Trả lời
Kiểm tra biến AUTH_USER
yêu cầu. Điều này sẽ trống nếu ứng dụng web của bạn cho phép truy cập ẩn danh, nhưng nếu máy chủ của bạn sử dụng xác thực tích hợp cơ bản hoặc Windows, nó sẽ chứa tên người dùng của người dùng được xác thực. Trong một miền Active Directory, nếu khách hàng của bạn đang chạy Internet Explorer và máy chủ web/hệ thống tệp của bạn được cấu hình đúng cách, IE sẽ âm thầm gửi thông tin đăng nhập miền của họ tới máy chủ của bạn và AUTH_USER
sẽ là MYDOMAIN\user.name
mà không cần người dùng phải đăng nhập một cách rõ ràng vào ứng dụng web của bạn.
số Nhưng những gì bạn có thể làm là có mục quản trị Active hãy bật LDAP để người dùng có thể duy trì một bộ chứng
Bạn don' t phải bật LDAP vì đây là thành phần cốt lõi của Active Directory. – VVS
Xem các hàm thư viện LDAP PHP: http://us.php.net/ldap.
Thư mục hoạt động [chủ yếu] tuân thủ tiêu chuẩn LDAP.
Có một số thư viện PEAR bổ sung có thể làm cho mọi việc dễ dàng hơn:
Bạn có thể có lẽ authenticate theuser in Apache với mod_auth_kerb bằng cách yêu cầu truy cập xác thực để một số tập tin ... Tôi nghĩ theo cách đó, tên người dùng nên cũng được có sẵn trong các biến môi trường PHP ở đâu đó… có lẽ tốt nhất để kiểm tra với <?php phpinfo(); ?>
khi bạn chạy nó.
Nếu bạn đang sử dụng Apache trên Windows, bạn có thể cài đặt mod_auth_sspi từ
http://www.gknw.at/development/apache/httpd-2.2/win32/modules/mod_auth_sspi-1.0.4-2.2.2.zip
dẫn là trong file INSTALL, và có một ví dụ whoami.php. (Đó chỉ là trường hợp sao chép tệp mod_auth_sspi.so vào một thư mục và thêm một dòng vào httpd.conf.)
Sau khi cài đặt và các cài đặt cần thiết được thực hiện trong httpd.conf để bảo vệ các thư mục bạn muốn, PHP sẽ điền vào số $_SERVER['REMOTE_USER']
với người dùng và tên miền ('USER \ DOMAIN') của người dùng được xác thực trong IE - hoặc nhắc và xác thực trong Firefox trước khi chuyển nó vào.
Thông tin dựa trên phiên, vì vậy đơn (ish) đăng nhập là có thể ngay cả trong Firefox ...
-Craig
Liên kết bị hỏng, khắc phục bằng: http://sourceforge.net/projects/mod-auth-sspi/ – PiTheNumber
Bạn có thể nói getenv('USERNAME')
Nhưng bạn cần cài đặt mô-đun Apache để sử dụng chức năng này. 'apt-get install libapache2-authenntlm-perl' – SatanicGeek
Điều này sẽ chỉ cho bạn tên máy tính. – Mike
Tôi đã có php mysql chạy trên IIS - Tôi có thể sử dụng $_SERVER["AUTH_USER"]
nếu tôi bật Windows Authentication trong IIS -> Xác thực và tắt xác thực Anonymous (quan trọng)
tôi đã sử dụng này để có được người dùng và tên miền của tôi:
$user = $_SERVER['AUTH_USER'];
$user
sẽ trả về một giá trị như: DOMAIN\username
trên mạng của chúng tôi và sau đó chỉ là trường hợp xóa DOMAIN\
khỏi chuỗi.
Điều này đã hoạt động trong IE, FF, Chrome, Safari (thử nghiệm) cho đến nay.
Tôi có php đang chạy trên IIS và chỉ xác thực Windows được bật cho trang web này. Tôi không có thông tin này. Tôi có thể kiểm tra lại cái gì? – manou
Check-out vá module xác thực NTLM cho Apache https://github.com/rsim/mod_ntlm
Dựa trên mô-đun auth NTLM cho Apache/Unix http://modntlm.sourceforge.net/
Đọc thêm tại http://blog.rayapps.com/
Nguồn: http://imthi.com/blog/programming/leopard-apache2-ntlm-php-integrated-windows-authentication.php
công trình get_user_name giống như getenv ('USERNAME');
tôi đã mã hóa (với Cyrillic) vấn đề sử dụng getenv ('USERNAME')
Nếu bạn đang tìm kiếm lấy từ xa sử dụng IDSID/Tên đăng nhập, sử dụng:
echo gethostbyaddr($_SERVER['REMOTE_ADDR']);
Bạn sẽ nhận được một cái gì đó giống như iamuser1-mys.corp.company.com
Lọc phần còn lại của miền phía sau và bạn chỉ có thể nhận idsid.
Để biết thêm thông tin chuyến thăm http://lostwithin.net/how-to-get-users-ip-and-computer-name-using-php/
Tham khảo cố gắng cũng để tìm hiểu xem AUTH_USER là một phần của một nhóm tên miền cụ thể; một cách thông minh để làm điều này là tạo một thư mục bị khóa với các tập tin văn bản (có thể để trống). Đặt bảo mật để chỉ có nhóm bảo mật/distro bạn muốn xác thực. Khi bạn chạy @file_get_contents (< --- sẽ gửi cảnh báo) ... nếu người dùng không có quyền truy cập nhóm, họ sẽ không thể nhận được nội dung tệp và do đó, sẽ không có quyền truy cập nhóm AD cụ thể đó. Điều này là đơn giản và hoạt động tuyệt vời.
Chúng tôi có nhiều miền trong môi trường của mình nên tôi sử dụng preg_replace với regex để chỉ nhận tên người dùng mà không có DOMAIN \.
preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]);
thử mã này:
$user= shell_exec("echo %username%");
echo "user : $user";
bạn được cung cấp tên cửa sổ (AD) của bạn trong php
Điều này sẽ chỉ cho bạn tên Máy tính – Katia
tôi đã cố gắng gần như tất cả những lời đề nghị, nhưng họ đều trở về giá trị rỗng.Nếu bất cứ ai khác có vấn đề này, tôi thấy chức năng này tiện dụng trên php.net (http://php.net/manual/en/function.get-current-user.php):
get_current_user();
$username = get_current_user();
echo $username;
Đây là cách duy nhất cuối cùng tôi đã có thể để có được tên thư mục hoạt động của người dùng. Nếu không có câu trả lời nào ở trên có hiệu quả, hãy thử.
Tôi nghĩ, theo cách này bạn sẽ có được người dùng đang chạy PHP trên máy chủ chứ không phải người dùng đã đăng nhập vào máy của mình và gửi yêu cầu từ trình duyệt web đến trang PHP của bạn . Trong trường hợp này, bạn có thể có một lỗ hổng bảo mật nghiêm trọng, vì trang PHP của bạn đang chạy như một người dùng hoàn toàn khác với các quyền khác nhau. – JustAMartin
@JustAMartin Tôi đã thử nghiệm điều này trong vài tháng qua và tôi liên tục nhận được người dùng đã đăng nhập trên máy và truy cập vào trang web được tạo bởi PHP của tôi - không phải theo cách khác. –
Đây là một ví dụ tích hợp NTLM AD đơn giản, cho phép đăng nhập một lần bằng Internet Explorer, yêu cầu đăng nhập/cấu hình trong các trình duyệt khác.
PHP Ví dụ
<?php
$user = $_SERVER['REMOTE_USER'];
$domain = getenv('USERDOMAIN');
?>
Trong file httpd.conf apache của bạn
LoadModule authnz_sspi_module modules/mod_authnz_sspi.so
<Directory "/path/to/folder">
AllowOverride All
Options ExecCGI
AuthName "SSPI Authentication"
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIOmitDomain On
Require valid-user
Require user "NT AUTHORITY\ANONYMOUS LOGON" denied
</Directory>
Và nếu bạn cần các mô-đun, liên kết này rất hữu ích:
đó là một sự xấu hổ này chỉ hoạt động với IE – Simurr
chỉ IE chuyển thông tin đăng nhập của bạn thông qua, các trình duyệt khác chỉ cần nhắc, trong trường hợp bạn chỉ cần cung cấp thông tin đăng nhập tên miền của bạn (tên miền \ tên người dùng và mật khẩu). – CodeMonkey1313
Firefox cũng hỗ trợ xác thực tích hợp (tự động). xem https://developer.mozilla.org/en/Integrated_Authentication – VolkerK