2011/03/07(月)insideなページ構築中 その2

ユーザ情報取得が必要で、結局LDAPの問い合わせが入るので、ケルベロス認証はやめました

ajaxでid, pw送って、それでLDAPに問い合わせてbindできればOKで、そのまま個人情報の取得
bindできなければそのままエラーで済ませることにした

Net::LDAPのインスコ

適当にググったサイトを参考にインスコ
手元の環境はネットにまともにつながらないのでCPANからインスコできなかった
というか、FTPくらい通して欲しい

なので、perl-ldap-0.4001.tar.gzを落としてperl Makefile.PL; make; make install
依存関係の都合で、これの前にConvert-ASN1も落として入れておく
途中ladpsとか入れるか聞かれるけど、optionalなので、全部 n

LDAPサーバを調べる

というか、直感で
server: xxx.xxx.xxx.xxx
domain: sample.ac.jp
かな

domainからbaseを作る
dc=sample,dc=ac,dc=jp
になる

スクリプト書く

use Net::LDAP;

my $user   = 'serika';
my $pass   = 'password';
my $domain = '@sample.ac.jp';
my $base   = 'dc=sample,dc=ac,dc=jp';

my $ldap;
my $res;

# サーバに接続
$ldap = Net::LDAP->new('xxx.xxx.xxx.xxx'); 
$res = $ldap->bind($user.$domain, password=>$pass);
if($res->code){ # 認証失敗
    exit();
}

# 問い合わせ
$res = Net::LDAP->search(base=>$base, filter=>"(sAMAccountName=$user)");
if($res->code){ # 問い合わせ失敗
    $ldap->unbind;
    exit();
}

# 必要なデータの取得
# 今回は表示名の取得
# foreachのまま使ってるけど、AccountNameが重複してない限り2回回らないので、[0]もあり
my $info;
foreach my $entry ($res->entries){
    $info = $entry->get_value('displayName');
}

# 解放
$ldap->unbind;

最後、解放忘れるとinternal server errorでるので注意

検索用

[Linux][Windows Server][Active Directory][LDAP][perl][認証]