最近、ドメインでLDAPベースの認証を有効にしました。これにより、1組の資格情報を使用して、ブログ、フォーラム、Wikiを管理できました。
残念ながら、これにはユーザーが自分のパスワードを変更できるという犠牲が伴いました。
理想的には、ユーザーはページ(つまりmydomain.com/account
)にアクセスし、認証してからパスワードを変更できるようになります。
誰でも私がこれをすばやく簡単に行うことができるスクリプトまたはアプリを知っていますか? PHPで書くのは難しくないでしょうが、面倒なことはしたくないと思います。
Serverfaultで、 Timが私を指摘しましたphpLdapPassword というスクリプトに向かって。
構成に約5分かかり、パスワードリセット機能も提供します。
唯一の潜在的な問題は、作成者がそれを維持していないことです。
このページ 方法を示しているようです:
認証にLDAPを使用し始めたら、おそらくユーザーにパスワードの変更を許可したいと思うでしょう。彼らはシェルログインをしたくない/できないので、ldappasswd(1)でパスワードを変更するかもしれないので、他の何か、もっとユーザーフレンドリーなものがいいでしょう。
LDAPを使用してコンパイルしたPHPの使用を選択しました。 SSLをサポートするApacheを使用すると、パスワードを平文で送信する必要がなくなりました。
これで、ユーザーは自分のパスワードのみを変更でき、パスワードのみを変更できるようになります。これは、slapd.confのこのスタンザで達成されました。
access to attr=userPassword
by self write
by anonymous auth
by * none
次のステップは、資格情報を使用してLDAPバインドを実行することにより、ユーザーを認証することです。
<?php
if(isset($username) and isset($newpass) and isset($oldpass)) {
$ldapconn = ldap_connect("ldap.example.com", 389);
$ldapbind = @ldap_bind($ldapconn,"uid=".$username.",dc=example,dc=com",$oldpass);
if($ldapbind) {
// If the bind with the old password succeeds, the user has entered the right username/password combination. To change the passwd we then do:
print "<p>Change password ";
if(ldap_mod_replace ($ldapconn, "uid=".$username.",dc=example,dc=com",
array('userpassword' => "{MD5}".base64_encode(pack("H*",md5($newpass))) {
print "succeded";
}
else {
print "failed";
}
print ".</p>\n";
}
?>
PhpLdapPasswdの元のサイトがダウンし、Karylが開発を中止したため、別のgithubプロジェクトを追加しました: https://github.com/koppor/phpLdapPasswd