2008-10-03 5 views

Trả lời

38

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.

+2

đó là một sự xấu hổ này chỉ hoạt động với IE – Simurr

+1

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

+6

Firefox cũng hỗ trợ xác thực tích hợp (tự động). xem https://developer.mozilla.org/en/Integrated_Authentication – VolkerK

1

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

http://us2.php.net/ldap

+2

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

2

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ó.

3

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

+1

Liên kết bị hỏng, khắc phục bằng: http://sourceforge.net/projects/mod-auth-sspi/ – PiTheNumber

0

Bạn có thể nói getenv('USERNAME')

+0

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

+1

Điều này sẽ chỉ cho bạn tên máy tính. – Mike

6

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.

+0

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

0

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')

1

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/

0

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.

0

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"]); 
-2

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

+0

Điều này sẽ chỉ cho bạn tên Máy tính – Katia

-1

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ử.

+0

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

+0

@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. –

0

Đâ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:

https://www.apachehaus.net/modules/mod_authnz_sspi/