- PR -

LDAP による Basic 認証

1
投稿者投稿内容
isam
会議室デビュー日: 2002/11/14
投稿数: 18
お住まい・勤務地: 渋谷・銀座
投稿日時: 2002-11-14 13:43
現在、LDAP を使用して Basic 認証をかけようとして困っている事があります。

認証機能自体の動作には成功しているのですが、サーバーが返すレスポンスヘッダの挙動に納得がいきません。

通常の一般的な Basic 認証ですと、認証に失敗した場合に 3 回再チャレンジした後に、「Authorization Required」の文字が表示されますよね(IE の場合)。
そして、ブラウザをリロードしたりなどすると、またブラウザがパスワード認証にチャレンジしてくれます。

しかし、auth_ldap モジュールで認証しようとすると、認証に失敗してもブラウザが再チャレンジをしてくれません。しかも IE を別プロセスで立ち上げなおさない限り、その認証ウィンドウを見ることすらできません。

telnet で何が起きているのか調べましたところ、認証に失敗しても Apache 側がレスポンスヘッダに

WWW-Authenticate: Basic realm="LDAP"

を含めてくれないのが原因のようです。通常のファイルを利用した認証の場合はきちんと返してくれます。
これを返してくれるようにする方法、またはパッチなどはございますでしょうか。
isam
会議室デビュー日: 2002/11/14
投稿数: 18
お住まい・勤務地: 渋谷・銀座
投稿日時: 2002-11-15 16:01
error_log から推測したことですが、ldap のエントリに存在するユーザー名で認証に失敗した時と、そもそもエントリに存在しないユーザー名をダイアログに入力したときで挙動が違うようです。
どうやら、サーチフィルタで 1 件も引っかからなかった場合に融通を利かせた挙動をしてくれないようです。

[Fri Nov 15 15:49:17 2002] [error] [client 192.168.0.198] AuthLDAP: user isam provided an empty password: /~isam/ldap/
こちらがユーザー:isam、パスワードを空で認証に失敗した場合。この場合はちゃんと認証に再チャレンジさせてくれます。

[Fri Nov 15 15:49:59 2002] [error] [client 192.168.0.198] Search must return exactly 1 entry; found 0 entries for search
(&(objectclass=*)(uid=isa)): URI /~isam/ldap/
こちらがユーザー:isa、パスワードを空で認証に失敗した場合。
WWW-Authenticate ヘッダを受け取らないので、ブラウザがユーザー名とパスワードをサーバーに送信しなくなります。


今一度 auth_ldap のマニュアルを読み直してみます。
giraffe
会議室デビュー日: 2002/10/03
投稿数: 10
投稿日時: 2002-11-15 16:48
# Apache のバージョンやどの LDAP 認証モジュールを使っているのかを
# 明記しておいた方が回答を得やすいと思いますよ。

LDAP は使ったことが無いので検証していませんが以下のパッチでどうでしょう? (auth_ldap-1.6.0 用です)

コード:
--- auth_ldap.c,org     Wed Jul  4 23:38:03 2001
+++ auth_ldap.c Fri Nov 15 16:23:47 2002
@@ -609,6 +609,8 @@
                         "Search must return exactly 1 entry; found "
                         "%d entries for search %s: URI %s",
                         count, filtbuf, r->uri);
+    if (sec->auth_authoritative)
+        ap_note_basic_auth_failure(r);
     ldap_msgfree(res);
     RELMUTEX(conf->mtx);
     RELMUTEX(sec->ldc->mtx);



とりあえず該当のエラー部のみですが、他にも同じようなのがありますねぇ。
作者の本意はわかりませんが、わざと WWW-Authenticate を返さないようにしたのかもしれません。
isam
会議室デビュー日: 2002/11/14
投稿数: 18
お住まい・勤務地: 渋谷・銀座
投稿日時: 2002-11-15 18:29
あと1時間早くこの掲示板をチェックしていれば…。
と、いうことで私のほうでも同じようにパッチを自作して解決いたしました。
バージョンの明記に関してですが、そうですね失礼致しました。

apache-1.3.27, auth_ldap-1.6.0 です。
vine linux 2.6 なのですが、とりあえず apt で auth_ldap の SRPM を落としてきてパッチ当てて自前 RPM で使っています。

コード:
--- auth_ldap.c Wed Jul  4 23:38:03 2001
+++ auth_ldap.c.new     Fri Nov 15 17:59:37 2002
@@ -611,4 +611,5 @@
                         count, filtbuf, r->uri);
     ldap_msgfree(res);
+    ap_note_basic_auth_failure(r);
     RELMUTEX(conf->mtx);
     RELMUTEX(sec->ldc->mtx);



C は Hello World くらいしか書いた事が無いので、危ないソースかもしれませんが。

引用:
とりあえず該当のエラー部のみですが、他にも同じようなのがありますねぇ。
作者の本意はわかりませんが、わざと WWW-Authenticate を返さないようにしたのかもしれません。



他のチェックの部分でもありましたね。バグではなく仕様なのでしょうが、理解に苦しみますね。
他の LDAP モジュール(mod_auth_ldap-2.4.1)も試しに入れてみたのですが、挙動は同じでした。

giraffe さん、わざわざどうも有難うございます。
1

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