我将在客户的数据中心安装一个运行自定义 Web 应用程序的 Ubuntu 11.10 机箱。客户无法通过 SSH 访问该机箱,但需要身份验证和授权才能访问 Web 应用程序。客户需要选择将 Web 应用程序指向我们在机器上本地安装的某个东西,或者使用他们拥有的 Active Directory 服务器。我计划使用标准的“用户属于组;组具有一组权限;Web 应用程序需要某些权限才能响应”身份验证设置。
我可以在本地安装哪些软件堆栈以便于轻松地在 Active Directory 服务器之间切换,同时保持配置尽可能简单(对我和最终客户而言)?
我希望尽可能多地使用现成的软件;我不想从事保护用户密码安全的工作。如果没有好的现成解决方案,我可以自己处理用户/组/权限关系(但这似乎不太可能)。
我会接受以“这是你需要的”页面链接形式给出的答案,但不会接受“这是 Kerberos 的功能”的答案,除非该页面还告诉我我的用例是否需要它(本质上,我知道 AD 可以使用 Kerberos,但我不知道我是否需要或者我是否可以只使用 LDAP,或者...)。
答案1
一路使用 LDAP。使用 SSL/TLS 简单绑定到 AD 服务器上的 LDAP,一切就绪。这种方法效果很好。如果您需要在本地复制该功能,OpenLDAP 也应该能很好地满足您的需求。
答案2
目前尚不清楚您试图在哪个级别验证您的客户端,并且从标签中假设您的“webapp”是用 python 编写的。
操作系统级别
如果你需要在操作系统级别进行身份验证,那么我建议同样开放Ubuntu 客户端。它非常方便,几分钟内即可完成 AD 身份验证。
Web 服务器级别
如果您想要在 Web 服务器级别使用 Apache 进行身份验证,请启用 ldap 模块并将以下内容添加到您的 vhost 配置中:
<Location "/">
AuthBasicProvider ldap
AuthType Basic
AuthzLDAPAuthoritative off
AuthName "My server"
AuthLDAPURL "ldap://directory.example.com:389/DC=example,DC=com?sAMAccountName?sub?(objectClass=*)" NONE
AuthLDAPBindDN "CN=apache,CN=Users,DC=example,DC=com"
AuthLDAPBindPassword hackme
require valid-user
</Location>
更多细节这里
当你尝试加载“webapp”的 URL 时,系统会提示你进行身份验证
Python
如果您想在应用程序内进行身份验证,那么您需要寻找可以为您执行此操作的 python 模块。这里就是其中之一。
答案3
如果您使用 php 作为 Web 应用程序,则可以将 php ldap auth 用于 AD:http://adldap.sourceforge.net/