为什么要使用mod_auth_kerb进行身份验证?

时间:2013-07-26 06:55:23

标签: django security kerberos

我在理解使用mod_auth_kerbKerberos服务器进行身份验证的原因时遇到了问题。

我正在使用Django + mod_wsgi + Apache开发网站。

我网站的第一页要求用户输入username/password,我的一个Django app将使用username/password并使用Python kerberos module对用户进行身份验证kerberos服务器。

我需要在哪里使用mod_auth_kerb

我知道我有权使用username/password对我有利,这是使用mod_auth_kerb的原因吗?

1 个答案:

答案 0 :(得分:5)

mod_auth_kerb可以做两件事:

  1. 通过HTTP Basic提示用户输入用户名和密码,并在服务器端使用Kerberos验证它们,或

  2. 允许浏览器通过HTTP Negotiate在两端使用Kerberos进行身份验证。如果客户端支持Kerberos,则会提供单点登录:客户端通过Kerberos系统自动对服务器进行身份验证,而无需通过用户登录时获取的凭据提示输入密码。

  3. 您在申请中正在做#1。将它移到Apache中可能会很有用,可以在所有应用程序中一致地完成它。 #2你根本就没有做,但它只在Kerberos基础设施可用的环境中有用。

    警告:我不知道“Python kerberos模块”,但它很可能没有安全地进行密码验证。声称这样做的许多事情相当于“kinit”:他们使用用户名和密码来获取初始Kerberos凭证(TGT),并声称成功,如果它似乎工作。问题是他们已经要求第三方(Kerberos身份验证服务器(密钥分发中心)或KDC)验证密码 - 但是他们没有检查到他们实际上是在与真正的KDC交谈。他们可能刚收到来自给他们密码的同一用户的消息,当然消息说“密码是正确的”。为了正确地执行此操作,验证程序需要在Kerberos领域(“委托人”)中拥有自己的标识,并采取额外步骤使用TGT为自己获取票证并进行验证;这可确保回复来自真正的KDC。

    如果您的KDC是Windows域控制器,另一种常见的方法是使用LDAP:通过LDAP连接到域控制器并使用密码进行身份验证; DC将根据Kerberos本身检查密码。当然,您遇到了同样的问题:您需要验证您是否正在与真正的域控制器通信 - 但您可以通过证书进行TLS,这可能更容易。