- PR -

LDAP認証について教えてください

投稿者投稿内容
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 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 ]
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-09-22 21:15
お作法についてはあまり知らないのですが...

たしかに、LDAP の RFC で MUST だか SHOULD だかになってるうちに
uid は入ってはおりませんが...
Unix系だと、uid が使えない LDAP サーバというものは
私は見たことがないです。他の OS だとわかりませんが。

引用:

raystarさんの書き込み (2004-09-22 16:47) より:
LDAPサーバに認証を掛ける際に

cn=<USER_ID>,o=dev,dc=atmarkit,dc=co,dc=jp

の文字列をLDAPのユーザIDとして飛ばそうと思っているのですが、
cn=??はユーザを識別するIDと理解してよろしいでしょうか?


う〜ん、質問がよくわからないのですが...
これを dn として使うのであれば、cn= のところは各ユーザを
ユニークに識別できる文字列じゃないとマズイです。
・・・って、そういう話ではないのかな?
masaka
常連さん
会議室デビュー日: 2003/08/04
投稿数: 27
お住まい・勤務地: 東京
投稿日時: 2004-09-22 23:18
引用:

そこでアプリケーションには ユーザID を登録し、
LDAPサーバに認証を掛ける際に

cn=<USER_ID>,o=dev,dc=atmarkit,dc=co,dc=jp

の文字列をLDAPのユーザIDとして飛ばそうと思っているのですが、
cn=??はユーザを識別するIDと理解してよろしいでしょうか?



これがobjectClassがpersonのエントリの話であれば、cnはRDN(相対識別名:同じ親エントリの下で一意になる名前)であるので、o=devのエントリの下ではユーザを識別するためのIDとして使用することが可能です。
ただし、他のo=dev以外のエントリ配下のpersonも含めた場合には必ずしも一意にはなりません。(異なったorganizationの下に同じcnを持ったpersonが存在する可能性がある)

いずれにせよ、LDAPを使ったシステムを作るときには「cnをIDと理解してよいか?」よりもLDAPのRFCを理解したうえで、「cnをIDとして使う」かどうかを決定していけばよいと思います。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-09-23 12:18
レスありがとうございます。

ぽんすさん

たしかMSのActiveDirectoryは uid がなかったように思います。

masakaさん

今開発中のシステムでは、
システムデータベースにユーザのログインIDを保存しています。
そのログインIDを cn= にくっつけて、LDAPサーバに投げればOKかな?とおもったのですが、
組織が違う場合は組織別にo= の情報を持たせないと一意に識別できないということですね。

ううむ。難しいですね。
ありがとうございました。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-09-24 06:17
引用:

raystarさんの書き込み (2004-09-23 12:18) より:
今開発中のシステムでは、
システムデータベースにユーザのログインIDを保存しています。
そのログインIDを cn= にくっつけて、LDAPサーバに投げればOKかな?とおもったのですが、
組織が違う場合は組織別にo= の情報を持たせないと一意に識別できないということですね。


なんだか話が通じてないようにみえるのですか...
# 分かってないのは私だけかしら?

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= だけですむし。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 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のユーザしか引っかからないわけなのです。。。。

ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-09-25 12:00
ん〜と、dn に「意味」を見出し過ぎているんじゃあないかと思うです。
dn はエントリの「位置」を示しているだけで、重要なのはエントリの
「中身」だ、と思っておいたほうがいいのではないでしょーか。

引用:

raystarさんの書き込み (2004-09-25 11:11) より:
組織情報をユーザと結び付けなければならないのですが、
そのような仕様が開発中のシステムに用意されていないのです。


具体的にはどういう要求なのか、いまひとつわかりませんが...
各ユーザのエントリに o とか ou とかの attribute を持たせて
おけば不満は無いのではないでしょーか。

dn は、
 dn: cn=userid,dc=atmarkit,dc=co,dc=jp
でO.K.
とゆーか、「各エントリにはどういう attribute をつけるか、
そのためにはどういう objectClass を持たせるか」といったことを
考えていけば「dn はどうしようか」ってのは悩むまでもなく
決定できると思うですよ。
# masaka さんが書かれていたのは↑こういうことだと思うですが...
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-09-27 19:10
ぽんすさん、知識不足ですみません。。。

では、この形ではいかがでしょうか。

dc=atmarkit,dc=co,dc=jpのDNと権限のあるユーザ、パスワードで
LDAPサーバへログインする

次に条件でFilterし、ユーザを検索する。

該当するユーザがあれば、パスワードをコンペアし、認証。

こういう形ってポピュラーでしょうか。

というか、根本的なことなので勉強をしなおします。。。><



[ メッセージ編集済み 編集者: raystar 編集日時 2004-09-27 19:11 ]

スキルアップ/キャリアアップ(JOB@IT)