web-dev-qa-db-ja.com

LDAPは、Active Directoryに対してWebアプリケーションを認証する唯一の方法ですか?

PHP WebアプリをActiveDirectoryに接続するにはどうすればよいですか?LDAPが唯一の方法ですか?

私がこれまでに持っているいくつかの参照 https://stackoverflow.com/questions/1003751/how-do-i-use-Microsoft-ad-and-php-single-sign-on-web-app

5
Keyne Viana

まあ、Active Directory is LDAP + Kerberos +その他の雑多な小片。正式にはcould Kerberosを介して認証しますが、それでは必要になる可能性のある他の認証データは提供されません。

ファイアウォールで禁止されておらず、適切なアクセス許可を持つユーザーアカウントを持っている限り、標準のLDAP PHPライブラリ、LDAPブラウザなどを使用してActiveDirectoryにクエリを実行できるはずです。

8
EEAA

LDAPは必要ありません。 SAMLでクレームベース認証(新しいトレンド)を使用できます。 A PHPライブラリは ここ です。

ネットワーク管理者にADFSv2をインストールしてもらい、ADがアプリでSAMLおよびエンドポイントWS-Trustを開くようにします。 ADFSは無料で、Windows 2008R2は最新バージョンを実行するのに適したOSです。

ヒント:トークンのリプレイ検出などの高度な機能が必要な場合は、SQL(SQL Expressではなく)を使用するようにインストールしてください。

4

私は現在、LDAP/ActiveDirectoryを介した従業員認証を必要とする私の会社のハイブリッドアプリケーションに取り組んでいます

in PHP LDAPに対して認証するのはそれほど難しくありません。

PHP構成では、セッションとLDAPを有効にする必要があります。

pHPを使用した基本認証の例を次に示します

class LDAP_Authentication
{
    private $connection;
    public function __construct($domain)
    {
        $this->connection = @ldap_connect($domain);
    }

    public connected()
    {
        return $this->connection !== false;
    }

    public function login($user,$password)
    {
        return @ldap_bind($this->connection,$user,$password);
    }
}

使用例:

session_start(); //Single Login

$LDAPAuth = new LDAP_Authentication('domain.internal');

if($LDAPAuth->connected())
{
    if($LDAPAuth->login('some_user',"some_pass"))
    {
        $_SESSION['logged_in'] = true;
        $_SESSION['credentials'] = array('some_user','some_pass');

        echo 'Welcome';
    }else
    {
        echo 'Try again';
    }
}

アップデート1

考えられる方法は、JavaScriptを使用してこれを実現することです。WScriptのネットワークオブジェクトを使用してクライアントのコンピューター名、ユーザー名、ドメインを検出し、資格情報を検出してサーバーに送信し、ADで確認します。サーバーはそのユーザーのセッションを作成し、成功をtrueに設定してJSONオブジェクトで応答します。

javaScript側では、その成功を確認してから、ブラウザを別の場所にリダイレクトし、ログインさせます。

POC:

var Data = {}
//Show loading layer
$("#loader").show();
try
{
    var Information = new ActiveXObject("WScript.Network");
    Data.Username = Information.UserName;
    Data.Computername = Information.ComputerName;
    Data.Domain = Information.UserDomain;

    $.post("/ldap/ajax/login",Data,fucntion(object){
        if(object.success)
        {
            document.location = "/"; //Will automatically start session.
        }else
        {
            document.location = "/ldap/faild/"; //general login page
        }
    });
}catch(e)
{
    document.location = "/ldap/faild/"; //general login page
}
1
RobertPitt

SAMLも試すことができます。 「SAMLApache」だけでなく「SAMLActiveDirectory」も検索してみてください。

1
DAM

そうですか? LDAPなしで接続するにはどうすればよいですか?

LinuxシステムがWinbind( http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/winbind.html )を実行している場合、おそらく標準のPAMサービスを使用して認証。また、指摘されているように、Kerberosを使用して認証することもできます(パスワードデータベースとして扱うか、Apacheのmod_kerberosなどを介して実際にKerberosトークンを受け入れることによって)。

Kerberosを使用すると、正しく実行するとセキュリティ上の利点が得られます(ユーザーパスワードがネットワークを通過しないため)。ただし、承認のためにグループメンバーシップなどを取得するには、LDAP(またはWinbindを実行しているローカルシステム)と対話する必要があります。

0
larsks