31

私が構築した「イントラネット」サイトには、独自のログイン システムがあります (ユーザーは新しいユーザーとして登録し、そのユーザー名/パスワードを使用してサイトにログインします)。ただし、今はそれを拡張して、イントラネット サイトで既存の ActiveDirectory を認証に使用するようにしたいと考えています。これは私が探しているものです。

ユーザーがこのイントラネット サイト ( http://intranetsite/mySite) にアクセスすると、ユーザーのドメイン資格情報が Active Directory に対して検証され、ユーザーの資格情報が AD と一致する場合、ユーザーにはイントラネット サイトのメイン ページが表示されます。

私は AD を初めて使用するので、この構成の進め方がわかりません。私のイントラネット サイトは PHP を中心に構築されており、アプリケーション サーバーで Apache を使用しています。AD は別の IIS サーバー上にあります。

AD 認証を使用できるようにするには、どのような情報が必要で、この情報をどこ (自分のサイト? htaccess? 他の場所?) に入力すればよいですか? 「構成」だけで十分ですか、それともこの認証のために明示的な PHP コードを記述する必要がありますか?

どんなポインタでも大歓迎です。

4

2 に答える 2

25

認証のみを探している場合は、数行のコードだけで済む場合があります。

まず、php でLDAP が有効になっていることを確認します。

純粋な php の実装は次のとおり
です。

$link = ldap_connect('domain.com'); // Your domain or domain server

if(! $link) {
    // Could not connect to server - handle error appropriately
}

ldap_set_option($link, LDAP_OPT_PROTOCOL_VERSION, 3); // Recommended for AD

// Now try to authenticate with credentials provided by user
if (! ldap_bind($link, 'username@domain.com', 'SomeSecret')) {
    // Invalid credentials! Handle error appropriately
}
// Bind was successful - continue

現在ログインしているユーザーに関する情報を取得するなど、Active Directory でもっと楽しいことを行う予定がある場合は、フレームワークを使用して面倒な作業を行うことを強くお勧めします。すでに述べたように、adLDAP は優れたツールです。PHP 5.4 を実行する場合は、私が積極的に開発しているAD-Xライブラリをお勧めします (Composer 経由でインストールできます)。

AD-X ライブラリを使用すると、次のコードを使用してユーザーの資格情報を確認できます。

try {
    $link = new ADX\Core\Link('domain.com'); // Establish connection to AD
    $link->bind('username@domain.com', 'SomeSecret'); // Authenticate user
}
catch (ADX\Core\ServerUnreachableException $e) {
    // Unable to connect to server, handle error
}
catch (ADX\Core\InvalidCredentialsException $e) {
    // Invalid credentials supplied
}
catch (Exception $e) {
    // Something else happened, check the exception and handle appropriately
}

// Successfully authenticated if no exception has been thrown

あなたに一番合ったものを自由に選んでください。ただし、認証以上のことを期待している場合は、ldap 作業にライブラリを使用することを強くお勧めします。ライブラリを使用すると、時間を大幅に節約でき、期待どおりに動作しない場合にフラストレーションを感じる可能性があります。

また、接続と認証に使用できる/すべき情報が不明な場合は、このトピックに関する以前の回答を自由に確認してください。

于 2013-07-21T19:15:20.693 に答える