我在理解为什么要使用 mod_auth_kerb
对 Kerberos
服务器进行身份验证时遇到问题。
我正在使用 Django + mod_wsgi + Apache
开发一个网站。
我网站的第一页要求用户输入username/password
,我的一个 Django app
将使用 username/password
并使用 Python kerberos 模块
向 kerberos 服务器验证用户。
我需要在哪里使用 mod_auth_kerb
?
我知道我将有权使用 username/password
对我有利,这是使用 mod_auth_kerb
的原因吗?
最佳答案
mod_auth_kerb 可以做两件事:
通过 HTTP Basic 提示用户输入用户名和密码,并在服务器端使用 Kerberos 验证它们,或者
允许浏览器通过 HTTP 协商在双方使用 Kerberos 进行身份验证。如果客户端支持 Kerberos,这将提供单点登录:客户端通过 Kerberos 系统自动向服务器进行身份验证,而无需提示输入密码,而是通过用户登录时获得的凭据。
你在你的应用程序中做了#1。将它移到 Apache 中可能会有用,因为它可以对所有应用程序一致地完成一次。 #2 你根本没有做,但它只在 Kerberos 基础设施可用的环境中有用。
警告:我不知道“Python kerberos 模块”,但它很可能没有安全地进行密码验证。许多声称这样做的事情都相当于“kinit”:他们使用用户名和密码来获取初始 Kerberos 凭证 (TGT),如果看起来有效,则声称成功。问题是他们已经要求第三方(Kerberos 身份验证服务器( key 分发中心)或 KDC)来验证密码——但他们没有检查他们实际上是在与真正的 KDC 对话。他们可能只是收到了来自给他们密码的同一用户的消息,消息当然会说“密码是正确的”。为了正确地做到这一点,验证者需要在 Kerberos 领域中拥有自己的身份(“主体”),并采取额外的步骤使用 TGT 为自己获取票证并对其进行验证;这确保回复来自真正的 KDC。
如果您的 KDC 是 Windows 域 Controller ,另一种常见的方法是使用 LDAP:通过 LDAP 连接到域 Controller 并使用密码进行身份验证; DC 将根据 Kerberos 本身检查密码。当然,您遇到了同样的问题:您需要验证您正在与真正的域 Controller 对话——但您可以通过证书使用 TLS 来做到这一点,这可能更容易。
关于django - 为什么要使用 mod_auth_kerb 进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17874816/