- - PR -
LDAP認証について教えてください
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-09-22 16:47
こんにちは。
現在、LDAP認証アプリを開発しております。 そもそも私のLDAPの知識に問題あるのですが、 以下のような構造があったとします。 dc=atmarkit,dc=co,dc=jp o=dev この組織に aさんが所属しているとします。 その場合、aさんを特定するには cn=a,o=dev,dc=atmarkit,dc=co,dc=jp でできると理解しています。 そこでアプリケーションには ユーザID を登録し、 LDAPサーバに認証を掛ける際に cn=<USER_ID>,o=dev,dc=atmarkit,dc=co,dc=jp の文字列をLDAPのユーザIDとして飛ばそうと思っているのですが、 cn=??はユーザを識別するIDと理解してよろしいでしょうか? uidはサポートしていないLDAPサーバもあるようなので、 cnを使おうと思っていますが、 このようなやり方はどのLDAPサーバでも共通の作法なのでしょうか。 間違っていたらご指摘ください。 よろしくお願いします。 [ メッセージ編集済み 編集者: raystar 編集日時 2004-09-22 16:49 ] | ||||
|
投稿日時: 2004-09-22 21:15
お作法についてはあまり知らないのですが...
たしかに、LDAP の RFC で MUST だか SHOULD だかになってるうちに uid は入ってはおりませんが... Unix系だと、uid が使えない LDAP サーバというものは 私は見たことがないです。他の OS だとわかりませんが。
う〜ん、質問がよくわからないのですが... これを dn として使うのであれば、cn= のところは各ユーザを ユニークに識別できる文字列じゃないとマズイです。 ・・・って、そういう話ではないのかな? | ||||
|
投稿日時: 2004-09-22 23:18
これがobjectClassがpersonのエントリの話であれば、cnはRDN(相対識別名:同じ親エントリの下で一意になる名前)であるので、o=devのエントリの下ではユーザを識別するためのIDとして使用することが可能です。 ただし、他のo=dev以外のエントリ配下のpersonも含めた場合には必ずしも一意にはなりません。(異なったorganizationの下に同じcnを持ったpersonが存在する可能性がある) いずれにせよ、LDAPを使ったシステムを作るときには「cnをIDと理解してよいか?」よりもLDAPのRFCを理解したうえで、「cnをIDとして使う」かどうかを決定していけばよいと思います。 | ||||
|
投稿日時: 2004-09-23 12:18
レスありがとうございます。
ぽんすさん たしかMSのActiveDirectoryは uid がなかったように思います。 masakaさん 今開発中のシステムでは、 システムデータベースにユーザのログインIDを保存しています。 そのログインIDを cn= にくっつけて、LDAPサーバに投げればOKかな?とおもったのですが、 組織が違う場合は組織別にo= の情報を持たせないと一意に識別できないということですね。 ううむ。難しいですね。 ありがとうございました。 | ||||
|
投稿日時: 2004-09-24 06:17
なんだか話が通じてないようにみえるのですか... # 分かってないのは私だけかしら? cn=<USER_ID>,o=dev,dc=atmarkit,dc=co,dc=jp を dn とした場合、o の値(およびそこから右の dc の値)を複数 用いれば - 例えば、o=dev のほかに o=dep なんていう値を使って いれば - LDAP としては「cn の値は同じなんだけど、異なるエントリ」 を扱うことができる。 ってゆーか、dn とはそういうものですよね。 cn の値として使っている文字列だけによってユーザをユニークに識別 できるかどうか、ってのは LDAP とは関係なく、そのデータを用意した 人には分かるはずで。 たとえ o=dep のほうがどうなっているのか知らなくても、 o=dev,dc=atmarkit,dc=co,dc=jp を base にしておけば フィルタは cn= だけですむし。 | ||||
|
投稿日時: 2004-09-25 11:11
こんばんわ。
ぽんすさん、レスありがとうございます。 今、懸念している内容としましては、 現在開発中のシステムが、どのような組織構造でも対応できるのか? ということです。 例えば、 システムにAさん、Bさんがいたとします。 dc=atmarkit,dc=co,dc=jp は両者とも同じだとしても、組織(o)が違った場合に、 システムで生成するDNが違ってきますよね。 組織情報をユーザと結び付けなければならないのですが、 そのような仕様が開発中のシステムに用意されていないのです。 LDAPの設定画面には LDAPサーバ ポート番号 ベースDN が入力可能です。 ここで、ベースDNに o=dev,dc=atmarkit,dc=co,dc=jp と設定した場合に cn=<システムで登録されているユーザID>, o=dev,dc=atmarkit,dc=co,dc=jp としてしまうと、 o=devのユーザしか引っかからないわけなのです。。。。 | ||||
|
投稿日時: 2004-09-25 12:00
ん〜と、dn に「意味」を見出し過ぎているんじゃあないかと思うです。
dn はエントリの「位置」を示しているだけで、重要なのはエントリの 「中身」だ、と思っておいたほうがいいのではないでしょーか。
具体的にはどういう要求なのか、いまひとつわかりませんが... 各ユーザのエントリに o とか ou とかの attribute を持たせて おけば不満は無いのではないでしょーか。 dn は、 dn: cn=userid,dc=atmarkit,dc=co,dc=jp でO.K. とゆーか、「各エントリにはどういう attribute をつけるか、 そのためにはどういう objectClass を持たせるか」といったことを 考えていけば「dn はどうしようか」ってのは悩むまでもなく 決定できると思うですよ。 # masaka さんが書かれていたのは↑こういうことだと思うですが... | ||||
|
投稿日時: 2004-09-27 19:10
ぽんすさん、知識不足ですみません。。。
では、この形ではいかがでしょうか。 dc=atmarkit,dc=co,dc=jpのDNと権限のあるユーザ、パスワードで LDAPサーバへログインする 次に条件でFilterし、ユーザを検索する。 該当するユーザがあれば、パスワードをコンペアし、認証。 こういう形ってポピュラーでしょうか。 というか、根本的なことなので勉強をしなおします。。。>< [ メッセージ編集済み 編集者: raystar 編集日時 2004-09-27 19:11 ] |