PHP:LDAPまたはActive Directoryからのオンザフライメールブック

アクティブディレクトリのロゴ あなたの会社はゆっくりですが確実に危機から脱出し、新しいオフィスや店舗がオープンし、仕事が現れます。従業員の数は増え続けています。 システム管理者として、あなたはすでにこれを事前に処理し、Active DirectoryまたはLDAPを実装しています。 ふう、アカウントにこれ以上の問題はありません。

しかし、私たちのビジネスでは、問題はもうすぐそこにあります。昨日は会計士5人、売り手3人、店主1人を雇いました。 誰もが企業のメールを必要としています。 事前に十分な数の移動を検討し、ADのインストールとともに、メールサーバーの承認をドメインに転送しておくと便利です。 アカウントの追加に5分を費やし、正しいデータを入力してヘルパーに渡します。これらの従業員はメールクライアントをセットアップします。 しかし、新しい住所を他のすべての従業員に報告する方法を教えてください。 みんなに手紙を書きますか? チャットに参加しますか? 平均的でかつ怠lazなシステム管理者にとってはあまりにも多くの作業。



2つの便利なソリューションがあります。メールクライアントをアドレスでADで実行するように説得する方法と、企業のWebサイトに表示する方法です。 本日、企業のWebサイトに必要な情報を提供するようにします。従業員とその住所のリストを表示し、データについてはActive Directoryの地区警察官に直接送信します。



php-ldapを詳しく見てみましょう



私たちのサイトがphpで書かれており、WebサーバーがADサーバーに直接アクセスし、php-ldap拡張がインストールされていることに同意しましょう。



マニュアルによると、いくつかの機能が必要です。 これらは、 ldap_connectldap_bindldap_searchldap_get_entriesldap_unbindです。 さらに、ADを使用するには、プロトコルバージョンを強制的に指定する必要があります。ldap_set_optionがこれを支援します。



書き込みフィルター



カタログには、グループ、オフィスユーザー、従業員レコードの両方があります。 とにかく、たくさんの余分な。 クリームだけを除去するフィルターを作成する必要があります。



一 オンラインメーリングブックを作成しているので、ユーザーのみを表示します。他のカタログオブジェクトは役に立ちません。

(objectCategory=user)





二。 これは郵送の本だと言ったことがありますか? メールアドレスが記載されていないアカウントは表示されません。

(mail=*)





三。 従業員は、やめたり、休暇に出かけたり、産休や病気休暇をとる傾向があります。 私たちはそのようなアカウントをブロックし、あなたが推測したように見せます。

(!(userAccountControl:1.2.840.113556.1.4.803:=2))





4。 これはオプションですが、このようなフィルターのレコードを知っておくと便利です。 特定のグループ(この例では「web_mail_catalog」)のメンバーシップをユーザーに確認します。 ここで、ou = groupsはそのようなグループが存在する組織単位であり、dc = mycompany、dc = crimea、dc = uaはドメイン名レコードです。

(memberOf=cn=web_mail_catalog,ou=groups,dc=mycompany,dc=crimea,dc=ua)





すべてを1つに結合してみましょう。 レコードはスペースなしで判明し、私はそれを判読可能な断片に分割しました。

(&

(mail=*)

(objectCategory=user)

(memberOf=cn=web_mail_catalog,ou=groups,dc=mycompany,dc=crimea,dc=ua)

(!(userAccountControl:1.2.840.113556.1.4.803:=2))

)






属性で定義



次に、属性カタログ(たとえば、 このカタログ)を見てみましょう。 どのフィールドが役立つかを推定しましょう。 名前、住所、役職、部署、会社名を表示するだけで十分だと思います。 表によると、これらはフィールドcnmailtitledepartmentおよびcompanyです。

それらをldap_search関数の引数の1つとして配列として少し後に渡します。



コーディングを始めましょう



いいえ、最初にインド音楽をオンにしましょう。 モチベーションのため。 PHPは私の趣味ではないので、OOPやMVCには関与しません。 希望する人は、好きなようにコードを書き換えることができます。



将来使用する変数のパックを示しましょう。

code1fr



はい、ほとんど忘れていました。 php-ldapがADをノックする権利なしで、別個のuchetkaを作成する必要があります。 さらに、$ srv- ldap://またはldaps://でプレフィックスを使用して、通常の暗号化された通信に使用できます。 私が覚えている限りでは、LDAP ADにはSSL証明書が必要です。



さらに一歩踏み出します。 同様に美しい変数へのフィルターと属性のセット。

code2fr



ここで、ADに接続して目的の検索を実行すると便利です。

code3fr



いくつかのhtmlバインディングを作成して追加します。 このようなものでなければなりません。



code4fr



真実の瞬間が来ました:何が起こったのか見てみましょう。



code5fr



これで、記事を完成させることは可能だと思います。 残念なことに、明確にするために、すべてが場所に収まるわけではなく、画像内のコードを追い越さなければなりませんでした。 もちろん、しみが発生する可能性があります-私の不注意の結果、コメントにそれについて書いて、私はそれを修正します。

私はここにコードの作業バージョン全体を置き、あなたが適切だと思うようにそれを使用します:)

シムのために私は私の休暇を取ることができます。



All Articles