Netscape Directory Server を用いた LDAPの習得

更新日 2001/4/23

[HOME] / [Java] / [Perl] / [Oracle8] / [Palm(GCC)] / [Palm(CodeWarrior)] / [EJB] / [本の紹介]


  1. はじめに
 仕事で、あるシステムのユーザ認証部分を検討し始めたのですが、この辺の分野は不勉強でディレクトリサービスの役割やLDAP(Lightweight Directory Access Protocol) すらよくわからない有様でした。ここでは、Netscape社(今はiPLANET)より、ディレクトリサーバソフトの評価版 をダウンロードし、主にLDAPに関する各種の実験を行います。

  これといった書籍が見つかってませんが、以下のHPなどは参考になります
    連載 ディレクトリサービスの仕組と活用

     2. 準備(インストール)
     3. Netscape Console  によるツリー構造の把握とユーザ登録
     4. ブラウザを用いたユーザ情報の編集
     5. LDAPによるディレクトリサービスの利用
     6. Web APサーバ(WebLogic Server) でのユーザ認証時の参照
     7. Netscape SDKを用いたLDAPプログラミングの実践
     8. セキュリティの設定
     9. シングルサインオンの実現
      10. Netscape Directory Server以外の情報
      11. 参考文献
 
 
 2. 準備(インストール)
  WindowsNT4.0マシンにNetscape Directory Server 4.12日本語版をインストールします。HPによれば、Netscape Directory Server 4.12では、NT4.0のサービスパック5(SP5)が指定されています。最新の4.13ではSP6なのですが。

  1. 何はともあれ、ダウンロードしてきましょう。36MBほどあるので、ADSLなんかが欲しくなります。NT用の他、HP-UX11.0用やSolaris用が用意されています。
  2. Netscape Directory Server 4.12日本語版のインストール

  3. インストール方法は、長くなるので切り出しています。ここを参照してください。

    ポイントは、Windowsでのネットワーク(TCP/IP)設定で、固定IPを指定することと、ドメイン名を設定することです。
    これを怠ると、インストール時に警告がでます。私はこれを読まずにインストールを進めたため、なかなかうまくいきませんでした。

    もう1つ、ランダムで作られるポート番号を控えて置いてください。あるいは覚えやすい番号を設定してください。

  3. Netscape Console によるツリー構造の把握とユーザ登録
  Netscape Console を用いて、インストール時点でのツリー構造を把握した上で、egami というユーザアカウントを作成してみます。大きくなりますので、ここに示します。

 ログインの際に、adminのパスワードとURLが必要で、URLは http://ホスト名:ポート番号/ となりますが、このポート番号がインストール時にランダム設定される番号になります。インストールの際にメモすることをお忘れなく。
 
  4. ブラウザを用いたユーザ情報の編集
 ここでは、ブラウザユーティリティを用いて、egami というアカウントを編集してみます。ブラウザで、URLとして http://ホスト名:ポート番号/ と入れればいいのですが、私のマシンでは遅くて使い物になりませんでした。
 
  5. Netscape Navigator によるディレクトリサービスの利用
 LDAPに対応したソフトはいろいろあるようですが、身近なところではメールソフトなどがあります。ここでは、NetscapeCommunicatorについてくるメーラを使って簡単な動作確認を実施してみます。

  1. Netscapeを起動し、Communicatorの中のアドレス帳を開いてください
  2. ファイルの中の新しいディレクトリを選択して、説明には適当に「NDS LDAPサービス」、LDAPサーバにNDSサーバのIPアドレス(私の環境では 192.168.0.7)、検索開始場所として、ツリーのトップ(私の環境では o=EGAMI)を設定します
  3. 設定後、左側のNDS LDAPサービスをクリックすると、サーバに接続にいきます。サーバが起動していないとその旨のワーニング表示があります。
  4. 表示する名前に何かを書くと、名前、電子メールアドレスなどでヒットしたものを結果表示します
  この他、ブラウザから直接検索することもできます。URLとして、以下のように入力して見てください。
  ldap://ldap_server_ip/o=EGAMI??sub?(cn=*yamada)
 
  6. Web APサーバ(WebLogic Server) でのユーザ認証時の参照
  BEA社のWebLogicServerは、EJBに関するページで紹介していますが、EJBやサーブレットが動かせるWebサーバのようなものです。このWebLogicのユーザ認証は特定のファイルに記述することで実現していますが、LDAPにも対応しており、外部のディレクトリサーバに問い合わせすることが可能です。ここでは、WebLogicServerにおける設定内容を示し、動作の確認を行いたいと思います。設定方法についてはWebLogicのHPにWebLogic LDAPセキュリティ・レルムの管理という記述がありますので、とりあえずこちらを参照ください。
 
  7. Netscape SDKを用いたLDAPプログラミングの実践
  Netscape社から提供されているSDK(Software Developement Kit)を用いて、Directory Server にアクセスする LDAP クライアントプログラムを作ってみます。Java版とC言語版がありますが、ここでは、Java版で実験してみます。
  1. まず、Javaの開発環境をインストールします。0から始めるJava言語の準備を参照してください。

  2.  
  3. SDKをダウンロードします。JavaならNetscape Directory SDK for Java 4.1、C言語ならNetscape Directory SDK for C 4.11、Perl用のも試してみたいものです(Perl LDAP 1.0)。

  4.  
  5. 解凍して適当なフォルダに収容します。これに合わせて、CLASSPATHを設定します。

  6. 私の場合、C\直下にldapjdk41フォルダを配置しましたので、システム環境変数のCLASSPATHのところに C:\ldapjdk41\packages\ldapjdk.jar; を追加しています。このとき、"."が含まれていることを確認してください。無い場合は、頭に .; (ピリオドとセミコロン)を加えて .;C:\ldapjdk41\packages\ldapjdk.jar; を追加してください。
     
  7. プログラムを確認してみましょう

  8. ここでは、検索だけを行う Search.java というものを見てみます。この中で、
    ld = new LDAPConnection();
       /* Connect to server */
       String MY_HOST = "192.168.0.7";   <-   Directory Server のホスト名またはIPアドレスを設定します。
       int MY_PORT = 389;
       ld.connect( MY_HOST, MY_PORT );

       /* search for all entries with surname of Jensen */
       String MY_FILTER = "uid=egami";      <-   登録したuidを設定します
       String MY_SEARCHBASE = "o=egami.com";  <-   登録した機関名(会社名など)を設定します
     

  9. コンパイルして、実行してみましょう

  10. コマンドプロンプトを立ち上げて以下のように入力します。
     
      C:\>cd ldapjdk41\examples\java
      C:\ldapjdk41\examples\java>javac Search.java

      C:\ldapjdk41\examples\java>java Search


    このとき、Exception in thread "main" java.lang.NoClassFoundError: Search と出るようであれば、前述のCLASSPATHにピリオドが設定されていないので、3項に従って設定してください。

    うまくいけば、以下のように結果表示されます。

    C:\ldapjdk41\examples\java\egami>java Search
    uid=egami, ou=People, o=egami.com
            Attributes:
                    objectclass
                            top
                            person
                            organizationalPerson
                            inetorgperson
                    cn
                            江上秀樹
                    uid
                            egami
                    givenname
                            秀樹
                    sn
                            江上
                    telephonenumber
                            043-xxx-xxxx
                    facsimiletelephonenumber
                            043-xxx-xxxx
                    userpassword
                            {SHA}K3jCW7kZ8fx9OH8CZNjMkdhDl/I=
                    aci
                            (target="ldap:///uid=egami,ou=People, o=egami.com")(targetattr="*")(version 3.0; acl "unknown"; allow (all) userdn = "ldap:///anyone"; )
                    labeleduri
                            http://www.cc.rim.or.jp/~egami3/
                    mobile
                            090-xxxx-xxxx

同様に、属性を絞って表示する例(GetAttrs.java)も参考になります。
 
 
  8. セキュリティの設定
  上の例では、誰でも検索できることになっていますが、ここで限られた人間だけ参照できるような設定について考えてみましょう。
 
  9. シングルサインオンの実現
  シングルサインオンは、一度ユーザIDとパスワードで認証した後は、他のソフトやシステムにLoginする際のユーザIDおよびパスワードの入力を自動的ににやってくれるというもので、認証が必要なHPでいくつかユーザアカウントを持っている人には便利な機能です。シングルサインオンはPCに搭載する機能で、Directory Server とは直接関係しませんが、いくつかの製品(Novellや日立など)では複数台のPCで共通的に使うために、ユーザ情報を Directory Server に蓄える方式が採られています。
 
  10. 製品情報
  Netscape社や日立 以外のディレクトリサービスソフトおよびシングルサインオンソフトの情報について以下に示します。

【ディレクトリサービス】
 

【シングルサインオン】
 日本エンコマース社 getAccess 4.0J
  日本チボリシステムズ  Policy Director
 
 
  11. 参考文献
  役に立つと思われる書籍を紹介しています。本文からも参照できるようにしていきますが、一覧はこちらでまとめています。


[HOME] / [Java] / [Perl] / [Oracle8] / [Palm(GCC)] / [Palm(CodeWarrior)] / [EJB] / [本の紹介]

このページにご意見のある方は、egami@ee.e-mansion.com までお願い致します。