我在理解使用mod_auth_kerb
对Kerberos
服务器进行身份验证的原因时遇到了问题。
我正在使用Django + mod_wsgi + Apache
开发网站。
我网站的第一页要求用户输入username/password
,我的一个Django app
将使用username/password
并使用Python kerberos module
对用户进行身份验证kerberos服务器。
我需要在哪里使用mod_auth_kerb
?
我知道我有权使用username/password
对我有利,这是使用mod_auth_kerb
的原因吗?
答案 0 :(得分:5)
mod_auth_kerb可以做两件事:
通过HTTP Basic提示用户输入用户名和密码,并在服务器端使用Kerberos验证它们,或
允许浏览器通过HTTP Negotiate在两端使用Kerberos进行身份验证。如果客户端支持Kerberos,则会提供单点登录:客户端通过Kerberos系统自动对服务器进行身份验证,而无需通过用户登录时获取的凭据提示输入密码。
您在申请中正在做#1。将它移到Apache中可能会很有用,可以在所有应用程序中一致地完成它。 #2你根本就没有做,但它只在Kerberos基础设施可用的环境中有用。
警告:我不知道“Python kerberos模块”,但它很可能没有安全地进行密码验证。声称这样做的许多事情相当于“kinit”:他们使用用户名和密码来获取初始Kerberos凭证(TGT),并声称成功,如果它似乎工作。问题是他们已经要求第三方(Kerberos身份验证服务器(密钥分发中心)或KDC)验证密码 - 但是他们没有检查到他们实际上是在与真正的KDC交谈。他们可能刚收到来自给他们密码的同一用户的消息,当然消息说“密码是正确的”。为了正确地执行此操作,验证程序需要在Kerberos领域(“委托人”)中拥有自己的标识,并采取额外步骤使用TGT为自己获取票证并进行验证;这可确保回复来自真正的KDC。
如果您的KDC是Windows域控制器,另一种常见的方法是使用LDAP:通过LDAP连接到域控制器并使用密码进行身份验证; DC将根据Kerberos本身检查密码。当然,您遇到了同样的问题:您需要验证您是否正在与真正的域控制器通信 - 但您可以通过证书进行TLS,这可能更容易。