Вот таким способом можно реализовать получение имени пользователя Windows средствами PHP. Для корректной работы кода в вам нужно будет сконфигурированный Apache.
*************************************************************** * PHP NTLM GET LOGIN * Version 0.2 * ==================================================== * * Copyright (c) 2004 Nicolas GOLLET (Nicolas.gollet@secusquad.com) * Copyright (c) 2004 Flextronics Saint-Etienne * * This program is free software. You can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License. * ***********************************************************************/ $headers = apache_request_headers(); if($headers['Authorization'] == NULL){ header( "HTTP/1.0 401 Unauthorized" ); header( "WWW-Authenticate: NTLM" ); exit; }; if(isset($headers['Authorization'])) { if(substr($headers['Authorization'],0,5) == 'NTLM '){ $chaine=$headers['Authorization']; $chaine=substr($chaine, 5); $chained64=base64_decode($chaine); if(ord($chained64{8}) == 1){ if (ord($chained64[13]) != 178){ echo "Please IE"; exit; } $retAuth = "NTLMSSP"; $retAuth .= chr(0); $retAuth .= chr(2); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(40); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(1); $retAuth .= chr(130); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(2); $retAuth .= chr(2); $retAuth .= chr(2); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth .= chr(0); $retAuth64 =base64_encode($retAuth); $retAuth64 = trim($retAuth64); header( "HTTP/1.0 401 Unauthorized" ); header( "WWW-Authenticate: NTLM $retAuth64" ); exit; } else if(ord($chained64{8}) == 3){ $lenght_domain = (ord($chained64[31])*256 + ord($chained64[30])); $offset_domain = (ord($chained64[33])*256 + ord($chained64[32])); $domain = substr($chained64, $offset_domain, $lenght_domain); $lenght_login = (ord($chained64[39])*256 + ord($chained64[38])); $offset_login = (ord($chained64[41])*256 + ord($chained64[40])); $login = substr($chained64, $offset_login, $lenght_login); $lenght_host = (ord($chained64[47])*256 + ord($chained64[46])); $offset_host = (ord($chained64[49])*256 + ord($chained64[48])); $host = substr($chained64, $offset_host, $lenght_host); $hostinfo = $host; } } } /* * Обработка полученных значений * http://www.maiboroda.ru */ // Обработка полученого логина с сервера $strLogin =''; for($i=0;$i<strlen($login);$i++) { if(ord($login[$i])!="0x00") $strLogin.=$login[$i]; } // Обработка имени компьютера полученного с сервера $strHost =''; for($i=0;$i<strlen($hostinfo);$i++) { if(ord($hostinfo[$i])!="0x00") $strHost.=$hostinfo[$i]; }
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
Обработка изображений в реальном времени на C# с OpenCV
stackOverflow 13.05.2025
Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
Конвейеры ETL с Apache Airflow и Python
AI_Generated 13.05.2025
ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .
Выполнение асинхронных задач в Python с asyncio
py-thonny 12.05.2025
Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .
Работа с gRPC сервисами на C#
UnmanagedCoder 12.05.2025
gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .
get_current_user
(PHP 4, PHP 5, PHP 7, PHP
get_current_user —
Получает имя владельца текущего PHP-скрипта
Описание
get_current_user(): string
Функция возвращает имя владельца текущего PHP-скрипта.
Список параметров
У этой функции нет параметров.
Возвращаемые значения
Функция возвращает имя пользователя в виде строки.
Примеры
Пример #1 Пример использования функции get_current_user()
<?phpecho 'Текущий владелец скрипта: ' . get_current_user();?>
Вывод приведённого примера будет похож на:
Текущий владелец скрипта: SYSTEM
Смотрите также
- getmyuid() — Получение UID владельца скрипта PHP
- getmygid() — Получить GID владельца скрипта PHP
- getmypid() — Получает ID процесса PHP
- getmyinode() — Получает значение inode текущего скрипта
- getlastmod() — Получает время последней модификации страницы
Нашли ошибку?
justin samuel ¶
19 years ago
to get the username of the process owner (rather than the file owner), you can use:
<?php
$processUser = posix_getpwuid(posix_geteuid());
print $processUser['name'];
?>
south dot bucks at gmail dot com ¶
12 years ago
On Centos, the Red Hat linux clone, this instruction gives the file's OWNER (the first parameter in instruction 'chown'). It does not reveal the file's GROUP.
get_current_user() does NOT reveal the current process' user's identity.
See: posix_getuid() - Return the real user ID of the current process
s dot bond1 at lse dot ac dot uk ¶
18 years ago
The information returned by get_current_user() seems to depend on the platform.
Using PHP 5.1.1 running as CGI with IIS 5.0 on Windows NT, get_current_user() returns the owner of the process running the script, *not* the owner of the script itself.
It's easy to test - create a file containing:
<?php
echo get_current_user();
?>
Then access it through the browser. I get: IUSR_MACHINE, the Internet Guest Account on Windows, which is certainly not the owner of the script.
-
#1
Вообщем, одолел я авторизацию моего web приложения в домене виндовом, через протокол LDAP, выброс формы, и вводим логин и пароль, проверяем, юзера и группу, все работает.
как теперь узнать ИМЯ текущего пользователя, который залогинелся??? и автоматически входит на веб ?
как я понимаю PHP это серверный язык, и он не работает на клиенте?
нашел такие разделы, NTLM авторизацию в AD
Но как я понимаю скрипт для АПАЧА
PHP:
$headers = apache_request_headers(); // Recuperation des l'entetes client
if($headers['Authorization'] == NULL){ //si l'entete autorisation est inexistante
header( "HTTP/1.0 401 Unauthorized" ); //envoi au client le mode d'identification
header( "WWW-Authenticate: NTLM" ); //dans notre cas le NTLM
exit; //on quitte
мое приложение крутиться на ms IIS server
значит, нужно, что-то, что может вытащить текущую учетку ?
На просторах, нета нашел для IIS сервера решение
Если PHP-приложение установлено на IIS, то это делается через переменную AUTH_USER. Проверила — работает на IE, Chrome и FireFox. Вот мой проверочный пример кода:
PHP:
<?php
echo $_SERVER['AUTH_USER'];
?>
В результате получаю имя пользователя в виде: MYDOMAIN\user.name
Есть только одно НО! Чтобы это решение действительно заработало, Вам придется отказаться от другого типа аутентификации на сайте (т.е. только через AD).
Вот что нужно сделать в IIS: у сайта в настройках аутентификации (Authentication) включаете (Enable) «Windows Authentication» и обязательно (!) отключаете анонимный доступ (Anonymous authentication).
В IE и Chrome заработает сразу, а FireFox нужно будет сначала поставить это дополнение и прописать сайт в доверенные: https://addons.mozilla.org/ru/firefox/addon/integrated-auth-for-firefox/
Но далее вопрос, я не владелец хостинга, не администратор, и возможно мне откажут, в отключении анонимности входа, так как я понял, все страницы, на этом IIS сервере крутяться с анонимным входом.
Как мне решить мою проблему ????
-
#2
Никак. NTLM работает только в локальной сети.
-
#3
Никак. NTLM работает только в локальной сети.
Веб у меня, только в ЛВС, в одном домене. Возможно вытащить учетку с локального компа, тыкнул на скрипт, и возврат аккаунта, [email protected]
-
#5
web приложение, у меня в ЛВС, в домене. Как получить имя залогиненного пользователя и передать в PHP ?
-
#6
IIS сам передаёт его в PHP. $_SERVER[‘AUTH_USER’]
-
#7
IIS сам передаёт его в PHP. $_SERVER[‘AUTH_USER’]
нужно отключать на IIS сервере анонимный вход, чтобы заработала данная функция
???
-
#8
Если хотите получать NTLM авторизацию? Да.
-
#9
Если хотите получать NTLM авторизацию? Да.
я не отличаю, в силу, новезны данного материала.
У меня есть LDAP атовризация, через форму
PHP:
<?php
// Форма для ввода пароля и логина
print '
<form action="index.php" method="post">
<table>
<tr>
<td>Имя:</td>
<td><input type="text" name="login" /></td>
</tr>
<tr>
<td>Пароль:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Авторизироваться" /></td>
</tr>
</table>
</form>
а мне надо, подставить в переменные АВТОМАТИЧЕСКИ, т.е. запустил веб страницу, и сразу вход на веб, данные об учетке , т.е. пароль не проверять, а только узнать, что за юзер, проверить, в какую группу он входит, и если он входит в нужную группу, То он попадет в разрешенный для этой группы раздел сайта.
Я возможно путаю вкорне данную задачу, такое допускаю. Так как я понял LDAP и NTLM разные вещи, точнее протоколы для разных задач.
PHP:
echo $_SERVER['AUTH_USER'];
пусто, ничего не возвращает
-
#10
Это как в том анекдоте.
Вы либо штаны наденьте, либо крестик снимите.
Либо LDAP через форму, либо NTLM через сервер.
-
#11
Это как в том анекдоте.
Вы либо штаны наденьте, либо крестик снимите.
Либо LDAP через форму, либо NTLM через сервер.
Понимаю, что не понимаю )))))) я думал, можно использовать оба эти инструмента, вытащить имя, и подставить его в LDAP … про NTLM я даже не читал …
а чтобы не ломать, как передать, ЛДАПУ, данные юзера, как-то можно вытащить это ?
-
#12
А теперь забудьте всё, что вы тут писали, и опишите задачу, не пытаясь её решить.
-
#13
А теперь забудьте всё, что вы тут писали, и опишите задачу, не пытаясь её решить.
Мне стыдно ))) ладно и так … Пользователь логинется в домен, открыввет index.php и попадает в допустимый раздел сайта на основе группы, допустем это CN=Admins, весь этот процесс без ввода пароля.
-
#14
Пользователь логинется в домен
Как это относится к вашей задаче?
открыввет index.php и попадает в допустимый раздел сайта на основе группы, допустем это CN=Admins, весь этот процесс без ввода пароля.
Вот это уже больше похоже на задачу.
Итак, у нас есть задача:
1. Обеспечить аутентификацию пользователей без ввода пароля, по учётке АД.
2. Обеспечить авторизацию оных пользоваталей на основании данных из АД.
Для решения первого вопроса, вам надо настроить IIS.
Для решения второго — по выданному вам IIS имени пользователя залезть в LDAP и вытащить нужную вам информацию.
-
#15
Как это относится к вашей задаче?
Вот это уже больше похоже на задачу.
Итак, у нас есть задача:
1. Обеспечить аутентификацию пользователей без ввода пароля, по учётке АД.
2. Обеспечить авторизацию оных пользоваталей на основании данных из АД.Для решения первого вопроса, вам надо настроить IIS.
Для решения второго — по выданному вам IIS имени пользователя залезть в LDAP и вытащить нужную вам информацию.
спасибо, буду читать про IIS.
А без пароля, это термин сквозная авторизация ? (мне для поиска)
У меня есть веб-приложение PHP в интрасети, которое может извлекать IP-адрес и имя хоста текущего пользователя на этой странице, но мне было интересно, есть ли способ получить / извлечь их имя пользователя Active Directory / Windows. Это возможно?
Проверьте переменную запроса AUTH_USER
. Это будет пустым, если ваше веб-приложение разрешает анонимный доступ, но если ваш сервер использует базовую или встроенную проверку подлинности Windows, он будет содержать имя пользователя аутентифицированного пользователя.
В домене Active Directory, если ваши клиенты работают с Internet Explorer, и ваши разрешения на веб-сервер / файловую систему настроены правильно, IE будет тихо отправлять свои учетные данные домена на ваш сервер, а AUTH_USER
будет MYDOMAIN\user.name
если пользователи не должны явно регистрировать в вашем веб-приложении.
У меня php mysql работает на IIS – я могу использовать $_SERVER["AUTH_USER"]
если я $_SERVER["AUTH_USER"]
проверку подлинности Windows в IIS -> Аутентификация и отключить анонимную аутентификацию (важно)
Я использовал это для получения моего пользователя и домена:
$user = $_SERVER['AUTH_USER'];
$user
вернет значение, например: DOMAIN\username
в нашей сети, а затем это просто случай удаления DOMAIN\
из строки.
Это работало в IE, FF, Chrome, Safari (проверено).
Посмотрите на функции библиотеки PHP LDAP: http://us.php.net/ldap .
Active Directory [в основном] соответствует стандарту LDAP.
Если вы используете Apache в Windows, вы можете установить mod_auth_sspi из
http://www.gknw.at/development/apache/httpd-2.2/win32/modules/mod_auth_sspi-1.0.4-2.2.2.zip
Инструкции находятся в файле INSTALL, и есть пример whoami.php. (Это просто копирование файла mod_auth_sspi.so в папку и добавление строки в httpd.conf.)
После его установки и необходимых настроек в httpd.conf для защиты каталогов, которые вы хотите, PHP заполнит $_SERVER['REMOTE_USER']
пользователем и доменом (USER \ DOMAIN) аутентифицированного пользователя в IE – – либо запросить и подтвердить подлинность в Firefox, прежде чем передавать его.
Информация основана на сеансе, поэтому сингл (ish) signon возможен даже в Firefox …
-Craig
Возможно, вы могли бы аутентифицировать пользователя в Apache с помощью mod_auth_kerb , требуя аутентифицированного доступа к некоторым файлам … Я так думаю, что имя пользователя должно также быть доступно в переменных среды PHP где-то … возможно, лучше всего проверить с помощью <?php phpinfo(); ?>
<?php phpinfo(); ?>
только вы его запустите.
Нет. Но что вы можете сделать, это активировать администратор Active Directory LDAP, чтобы пользователи могли поддерживать один набор учетных данных
http://us2.php.net/ldap
Если вы хотите получить идентификатор / имя пользователя удаленного пользователя, используйте:
echo gethostbyaddr($_SERVER['REMOTE_ADDR']);
Вы получите что-то вроде iamuser1-mys.corp.company.com
Отфильтруйте остальную часть домена позади, и вы можете получить только идентификатор.
Для получения дополнительной информации посетите http://lostwithin.net/how-to-get-users-ip-and-computer-name-using-php/
get_user_name работает так же, как getenv (‘USERNAME’);
У меня были проблемы с кодированием (с кириллицей) с использованием getenv (‘USERNAME’)
Ссылка на попытку также выяснить, является ли AUTH_USER частью определенной группы домена; умный способ сделать это: t создать заблокированную папку с текстовыми файлами (может быть пустым). Установите безопасность только для группы безопасности / группы, которую вы хотите проверить. Когда вы запустите @file_get_contents (<— будет бросать предупреждение) … если у пользователя нет группового доступа, они не смогут получить содержимое файла и, следовательно, не будут иметь доступ к этой конкретной группе AD. Это просто и прекрасно работает.
Вы можете сказать getenv('USERNAME')
У нас есть несколько доменов в нашей среде, поэтому я использую preg_replace с регулярным выражением, чтобы получить только имя пользователя без DOMAIN \.
preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]);
Это простой пример интеграции NTLM AD, который позволяет осуществлять единый вход в Internet Explorer, требует входа / конфигурации в других браузерах.
Пример PHP
<?php $user = $_SERVER['REMOTE_USER']; $domain = getenv('USERDOMAIN'); ?>
В файле apache httpd.conf
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>
И если вам нужен модуль, эта ссылка полезна:
https://www.apachehaus.net/modules/mod_authnz_sspi/
попробуйте этот код:
$user= shell_exec("echo %username%"); echo "user : $user";
вы получаете имя пользователя Windows (AD) в php
Я попробовал почти все эти предложения, но все они возвращали пустые значения. Если у кого-то еще есть эта проблема, я нашел эту удобную функцию на php.net ( http://php.net/manual/en/function.get-current-user.php ):
get_current_user(); $username = get_current_user(); echo $username;
Это был единственный способ, которым я наконец смог получить имя пользователя активного каталога пользователя. Если ни один из вышеперечисленных ответов не сработал, попробуйте.