提问人:Roger McCarrick 提问时间:10/25/2023 更新时间:10/31/2023 访问量:26
使用 LDAP 的 Apache 基于表单的身份验证
Apache Form Based Authentication with LDAP
问:
我在 Red Hat 9.0 上有 Apache 2.4 (httpd)。 我有使用 ldap 的基本身份验证。它给出了要求输入用户名和密码的弹出框。所以现在我想改变它,以便我可以呈现一个自定义表单。
这就是我目前所拥有的。
<Directory /var/www/html/private>
AuthType Basic
AuthName "Login"
AuthBasicAuthoritative off
AuthBasicProvider ldap
AuthLDAPURL "ldap://DC:389/OU=Users,dc=x,dc=com?sAMAccountName?sub?(objectClass=*)"
Require valid-user
AuthLDAPBindDN username
AuthLDAPBindPassword pAsSwOrD
</Directory>
尝试跟随
https://blog.sensecodons.com/2023/01/use-custom-login-page-when-using-apache.htm
l
这就是我试图添加的内容
<Directory "/do-login.html">
SetHandler form-login-handler
AuthFormLoginRequiredLocation "login.html"
AuthFormLoginSuccessLocation "/admin/index.html"
AuthFormProvider ldap
AuthUserFile /dev/null
AuthType form
AuthName "Admin"
Session On
SessionCookieName session path=/
</Directory>
我将第一个指令中的 AuthType 更改为“Form”
我有一个表格:
<form method="POST" action="/do-login.html">
Username: <input type="text" name="httpd_username" value="" />
Password: <input type="password" name="httpd_password" value="" />
<input type="submit" name="login" value="Login" />
</form>
这对我不起作用,它不断将我送回登录名 .html 。
do-login.html应该是什么样子的?
答:
我让它工作了。我有 2 个指令,我必须将所有 ldap 内容添加到第二个指令中,包括 URL、名称和密码
<Directory /var/www/html/private>
AuthType Form
AuthName "Login"
AuthFormProvider ldap
AuthFormLoginRequiredLocation "/login.shtml"
AuthLDAPURL "ldap://DC:389/OU=Users,dc=x,dc=com?sAMAccountName?sub?(objectClass=*)"
Require valid-user
AuthLDAPBindDN username
AuthLDAPBindPassword pAsSwOrD
Session On
SessionCookieName session path=/
</Directory>
然后使用位置
<location "/do-login.html">
SetHandler form-login-handler
AuthFormLoginRequiredLocation "badlogin.shtml"
AuthFormLoginSuccessLocation "/private/index.html"
AuthFormProvider ldap
AuthLDAPURL "ldap://DC:389/OU=Users,dc=x,dc=com?sAMAccountName?sub?(objectClass=*)"
Require valid-user
AuthLDAPBindDN username
AuthLDAPBindPassword pAsSwOrD
AuthType form
AuthName "Login"
Session On
SessionCookieName session path=/
</location>
这对我现在很有效。我的登录表单用 HTML 和 CSS 包装。我使用此处找到的一些代码创建了一个不错的登录表单:
https://w3codepen.com/html-css-login-form-page/
对于错误的凭据,它会加载 badlogin.shtml,这是相同的形式,并以红色字体添加“错误的用户名或密码”。
顺便说一下,do-login.html只是一个空白页。您甚至根本不需要拥有该页面。我只是把它留作一个空白的html文件。
使用非基于表单的 ldap 登录,用户只是得到了那个弹出框,他们以错误的格式输入了他们的信条。有了这个表单,我能够自定义外观,使其看起来更加用户友好,并给出所需凭证格式的说明。
希望这对某人有所帮助。
更新 - 2023年10月30日 我找到了这个:
https://stackoverflow.com/questions/43287063/redirect-to-previous-page-after-login-from-authformloginlocation-apache2-config/44718693#44718693
我正准备发布这个问题,
我的网站有一个公共和私人部分。下拉菜单中有指向私人部分的链接。 选择专用链接后,系统会将您定向到登录页面。登录页面将您定向到 AuthFormLoginSuccessLocation 而不是从下拉列表中选择的私有页面。这可能吗?像这样: AuthFormLoginSuccessLocation =“已选择的页面”
就像上面一样为我做这件事。因此,我几乎感觉到我基于表单的Apache登录现在已经完成。
评论