Django的Kerberos身份验证
项目描述
Django的Kerberos身份验证
为Django应用程序提供Kerberos身份验证。
支持Python 2和3,Django >1.8。
基本用法
将此添加到您的项目 urls.py
url('^accounts/kerberos/', include('django_kerberos.urls')),
并使用默认的身份验证后端,通过将其添加到您的 settings.py 文件
AUTHENTICATION_BACKENDS = ( 'django_kerberos.backends.KerberosBackend', )
设置
KERBEROS_HOSTNAME
获取服务密钥的主机名,相应的主体将是 HTTP/{KERBEROS_HOSTNAME}@DEFAULT_REAML,默认为 None。如果为 None,则将使用请求中的主机名。
KERBEROS_BACKEND_CREATE
是否在找不到现有模型时创建用户,默认为 False。
KERBEROS_BACKEND_ADMIN_REGEXP
主体必须匹配的正则表达式以获取超级用户权限,默认为 None。一个经典示例可能是 r’^.*/admin$’。
KERBEROS_SERVICE_PRINCIPAL
当检查密码与KDC的密码时使用的服务主体,您不需要此主体的密钥,它只需存在于Kerberos数据库中即可,因为检查是通过尝试获取此服务的票据来完成的。默认为None。它仅用于伪密码哈希器和登录/密码身份验证后端。
KERBEROS_KEEP_PASSWORD
KerberosPasswordBackend是否在每次用户登录时将检查密码的哈希存储在用户模型中。默认为False。它允许您的网站在Kerberos失败或您需要从域中分离时提供备份身份验证。
自定义后端
可以使用自定义身份验证后端,在这种情况下,authenticate方法的签名必须是
class CustomKerberosBackend(object): def authenticate(self, principal=None): pass
示例应用程序
首先,您需要像这样将django-kerberos安装到您的环境中
python setup.py install
如果您想尝试示例应用程序,您必须将此行添加到您的 /etc/hosts 文件中,绝对在开头
127.0.0.1 test.example.com
然后您必须连接到您的Kerberos管理服务器,并添加principal HTTP/test.example.com,并将其密钥导出到keytab文件中
$ kadmin -p myuser/admin kadmin: addprinc -randkey HTTP/test.example.com kadmin: ktadd -k /tmp/keytab HTTP/test.example.com
最后,您可以运行示例程序
cd sample; KRB5_KTNAME=FILE:/tmp/keytab python ./manage.py runserver
现在您应该可以登录到http://test.example.com:8000/
示例项目已配置为所有以/admin结尾的principal都获得staff和超级用户标志。您可以通过编辑sample/sample/settings.py中的密钥KERBEROS_BACKEND_ADMIN_REGEXP来更改此设置。
伪哈希器
具有导入路径django_kerberos.hashers.KerberosHasher的伪哈希器提供了一种将Django用户模型与Kerberos身份关联起来的方法。
密码字段的必须内容为kerberos$
要为principal创建用户,您可以执行以下操作
User.objects.create(username=new_username, password='kerberos$' + principal)
登录/密码后端
如果您的用户没有为SPNEGO HTTP认证配置浏览器,您还可以提供经典的登录/密码表单,该表单使用Kerberos检查密码。
自动登录
提供了一个模板包含来实现自动登录。它使用AJAX调用Kerberos登录视图。登录视图中的AJAX支持使视图返回一个包含布尔值的JSON文档,指示登录是否成功。如果登录成功,则重新加载当前视图。
要使用此模板,只需将以下代码添加到您的任何模板中
{% include "django_kerberos/autologin.html" %}
成功登录后,将创建一个cookie,该cookie将防止在接下来的15分钟内自动登录,以便在立即注销后允许使用其他方法进行登录。
模板显示一个具有id“kerberos-autologin”和包含文本“自动登录…”的HTML div,这样您就可以添加CSS样式。
自动登录的JavaScript实现是一个名为“js/autlogin.html”的脚本,它可以被重复使用以实现其他协议的自动登录。它唯一的要求是有一个视图,该视图在HTTP GET请求上返回“true”,如果登录成功。该脚本提供一个javascript函数,其签名是
autologin(url, callback[. timeout])
url是登录视图的URL,callback是一个javascript函数,它将接收true或false,取决于登录是否成功,timeout是成功登录后自动登录禁用的秒数,默认为15分钟。
项目详情
下载文件
下载适合您平台文件的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。