web-dev-qa-db-ja.com

PHPでWindows(AD)ユーザー名を取得できますか?

そのページで現在のユーザーのIPとホスト名を抽出できるイントラネット上のPHP Webアプリケーションがありますが、Active Directoryを取得/抽出する方法があるかどうか疑問に思っていました/ Windowsユーザー名もこれは可能ですか?

43
fuentesjr

AUTH_USER要求変数。 Webアプリが匿名アクセスを許可している場合、これは空になりますが、サーバーが基本認証またはWindows統合認証を使用している場合、認証されたユーザーのユーザー名が含まれます。

Active Directoryドメインで、クライアントがInternet Explorerを実行しており、Webサーバー/ファイルシステムのアクセス許可が適切に構成されている場合、IEはサーバーにドメイン資格情報をサイレント送信し、AUTH_USERMYDOMAIN\user.nameユーザーがWebアプリに明示的にログインする必要はありません。

45
Dylan Beattie

IISでphp mysqlを実行しています-$_SERVER["AUTH_USER"]を使用できますif IIS->認証でWindows認証を有効にして有効にしますoff匿名認証(重要)

私はこれを使用してユーザーとドメインを取得しました:

$user = $_SERVER['AUTH_USER'];

$userは、ネットワーク上のDOMAIN\usernameのような値を返します。その後、文字列からDOMAIN\を削除するだけです。

これは、これまでIE、FF、Chrome、Safari(テスト済み)で機能していました。

16
Schwarz.Oz

PHP LDAPライブラリ関数: http://us.php.net/ldap を見てください。

Active Directoryは[ほとんど] LDAP標準に準拠しています。

4
warren

WindowsでApacheを使用している場合は、mod_auth_sspiを次からインストールできます。

https://sourceforge.net/projects/mod-auth-sspi/

手順はINSTALLファイルにあり、whoami.phpの例があります。 (mod_auth_sspi.soファイルをフォルダーにコピーし、httpd.confに行を追加するだけです。)

インストールされ、必要な設定がhttpd.confで行われ、希望するディレクトリを保護すると、PHPが$_SERVER['REMOTE_USER']認証済みユーザーのユーザーとドメイン( 'USER\DOMAIN')をIE-または渡す前にFirefoxでプロンプトと認証を行います。

情報はセッションベースであるため、Firefoxでもシングルサインオンが可能です...

-クレイグ

3
CrayFishUK

リモートユーザーIDSID /ユーザー名を取得する場合は、次を使用します。

echo gethostbyaddr($_SERVER['REMOTE_ADDR']);

Iamuser1-mys.corp.company.comのようなものが得られます

背後のドメインの残りをフィルタリングすると、idsidのみを取得できます。

詳細については、 http://lostwithin.net/how-to-get-users-ip-and-computer-name-using-php/ をご覧ください。

2
Eddy Goh

おそらく authenticate theApacheのユーザー with mod_auth_kerb いくつかのファイルへの認証されたアクセスを要求することで…そのように、ユーザー名も利用可能であるべきだと思いますin PHPどこかの環境変数...おそらく、実行中に<?php phpinfo(); ?>で確認するのが最善です。

2
hangy

環境に複数のドメインがあるため、regexでpreg_replaceを使用してDOMAIN \なしのユーザー名のみを取得します。

preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]);
2
GMR

Apache用のパッチを適用したNTLM認証モジュールを確認してください https://github.com/rsim/mod_ntlm

Apache/Unix用のNTLM認証モジュールに基づく http://modntlm.sourceforge.net/

詳細は http://blog.rayapps.com/ をご覧ください

ソース: http://imthi.com/blog/programming/leopard-Apache2-ntlm-php-integrated-windows-authentication.php

1
blomman9

getenv('USERNAME')と言うことができます

0
Someone

これは単純な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/

0
PodTech.io

このコードを使用してください:

Shell_exec("wmic computersystem get username")
0
NightwingDFMX

AUTH_USERが特定のドメイングループの一部であるかどうかを把握しようとする参照。これを行う巧妙な方法は、テキストファイル(空白でも可)でロックダウンフォルダーを作成することです。検証するセキュリティ/ディストリビューショングループのみを持つようにセキュリティを設定します。 @file_get_contentsを実行すると(<---警告を投げます)...ユーザーがグループアクセス権を持っていない場合、ファイルコンテンツを取得できず、その特定のADグループアクセス権を持ちません。これは単純であり、素晴らしく機能します。

0
George

いいえ。ただし、ユーザーが1組の資格情報を維持できるように、Active Directory管理者にLDAPを有効にしてもらうことができます。

http://us2.php.net/ldap

0
Peter Bailey

get_user_nameはgetenv( 'USERNAME')と同じように機能します。

Getenv( 'USERNAME')を使用してエンコード(キリル文字)の問題が発生しました

0
Kornilov Ruslan