2017-09-29 10 views
0

phpのLDAPモジュールを使用せずにLDAP経由でユーザを認証する方法はありますか?残念ながら、ほとんどの共有ホストはLDAPモジュールを持っていないようです。私は現在、localhostのldapモジュールで次のような作業をしていますが、cURLやfile_get_contentsなどの代替メソッドで同じことを達成したいと思います。ありがとうございますカールでPHPとLDAPを使って認証

$ldap_connect = ldap_connect("server.ip", 389); 
ldap_set_option($ldap_connect, LDAP_OPT_NETWORK_TIMEOUT, 4); 

     $ldap_fqdn_user=$samaccountname. "@" . $ldap_domain; 

     if (!($bind = ldap_bind($ldap_connect, $ldap_fqdn_user, $ldap_password))) { 
      ldap_close($ldap_connect); 
      echo "Incorrect Username or Password"; 
     } else { 
      ldap_close($ldap_connect); 
      echo "Correct username and password"; 
     } 
+0

を提供するためのhttp://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/のおかげで一般的にLDAP認証の内部/オンサイト方式でいえば、共有ホストはこれを許可する理由を持っていないだろう。あなたが行うことができる最善のことは、内部的にLDAPサーバーへの認証要求を処理するローカルサーバーにAPIを持たせることです。それ自体がセキュリティリスクです。 – MackieeE

+0

ofcあなたはsocket_ apiで手動でLDAPプロトコルを再実装することはできますが、多くの作業が必要になります – hanshenrik

+0

純粋にPHPを使用してLDAPサーバプロトコルを実装できますが、したくないです。したがって、PHPのLDAPモジュールを持たない設定をサポートしないことが賢明な決断です。そこにいるすべての貧弱なセットアップをサポートするために、かかとに頭を下げる必要はありません。 – Mjh

答えて

0

幸いにもcurlはLDAPをネイティブサポートしています。私はそれを自分自身を使用したことがない、しかし、私は同等ますcurl_setoptがここ

curl_setopt_array ($ch, array (
     CURLOPT_PROTOCOLS => CURLPROTO_LDAP, 
     CURLOPT_PORT => 389, 
     CURLOPT_URL => 'server.ip', 
     CURLOPT_TIMEOUT => 4, 
     CURLOPT_USERPWD => $ldap_fqdn_user . ':' . $ldap_password 
)); 

だろうと思います完全に動作する例、パスワードが/正しいカールに問題がある場合は、

<?php 
declare(strict_types = 1); 
header ("content-type: text/plain;charset=utf8"); 
$ch = curl_init(); 
curl_setopt_array ($ch, array (
     CURLOPT_PROTOCOLS => CURLPROTO_LDAP, 
     CURLOPT_PORT => 389, 
     CURLOPT_URL => 'ldap.forumsys.com', 
     CURLOPT_TIMEOUT => 4, 
     CURLOPT_USERPWD => 'cn=read-only-admin,dc=example,dc=com:password' 
)); 
if (curl_exec ($ch)) { 
    echo "correct password"; 
} else { 
    echo "maybe wrong password? curl got an error. errno:" . curl_errno ($ch) . '. error: ' . curl_error ($ch); 
} 
curl_close ($ch); 

変更パスワードへのチェックたとえば、paswordd、それは失敗します。 (ライン10)

や公共テストサーバー

+0

投稿したコードを読むことができず、LDAP(SS1、TLS、GSS-API、GSS-API + SASL)の異なる認証メカニズムの件名に触れることさえありません。あなたが投稿したコードは、LDAPサーバと同じネットワークにいる場合にのみ使用することができます。正当な考え方でポート389/636を公に公開する人は誰ですか?あなたが完全に理解していない何かを実行している、テストされていないコードのチャンクをポストする際のポイントは何ですか? – Mjh

+0

@Mjh彼のサンプルコードでは、彼は暗号化されていないバージョンのLDAP用のポート389を使用しているので、ポートしたいコードは暗号化されていないLDAPを使用しています。 LDAPSを使用したい場合は、通常はポート636です.CURLPROTO_LDAPSを使用する必要があります。私はIDEにアクセスしていませんでした。私はフォーマットに使用しています。したがって、フォーマットの問題です。 'あなたが完全に理解していない何かを行う、いくつかのテストされていないコードのチャンクをポストするのはどういう意味ですか?うまくいきます。 – hanshenrik

+0

私が作ろうとしている点は、特定のシナリオでのみ動作するコードを提供していることです。そのシナリオは、cURLを介した要求を行っているコンピュータが同じドメイン/ネットワークに存在している必要がありますLDAPサーバーとして。私が作ろうとしているもう一つのポイントは、あなたが完全にテストしなかったものに、人々がグーグルで絶対的な真実と考える答えを与えているということです。あなたはそれを広げて、警告を加えたものではないが、あなたはそうしなかったかもしれない。それは私に尋ねたものに私たちをもたらします - 何がポイントですか?ポイントは想像上の評判を集めることです。右? – Mjh

関連する問題