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

标签 django security kerberos

我在理解为什么要使用 mod_auth_kerbKerberos 服务器进行身份验证时遇到问题。

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

我网站的第一页要求用户输入username/password,我的一个 Django app 将使用 username/password并使用 Python kerberos 模块 向 kerberos 服务器验证用户。

我需要在哪里使用 mod_auth_kerb

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

最佳答案

mod_auth_kerb 可以做两件事:

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

  2. 允许浏览器通过 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/

相关文章:

javascript - 来自 Python json.dumps 的 JSON 响应

python - 过滤月份值不返回对象

django - 在使用 Heroku 时为 Django 中的本地开发配置 postgresql 数据库

python - 如何在 Django URL 模式中使用小数?

python - openerp 7 中的字段级访问权限和安全性

java - 通过 Java 的 SFTP 连接要求奇怪的身份验证

GSSAPI 中的 javax.naming.AuthenticationException

security - 是否可以禁止运行docker容器的用户覆盖镜像的入口点?

security - 反射(reflect)跨站点脚本的可能的攻击媒介是什么?

ldap - openLDAP 的单点登录