You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在企业环境中使用Kerberos认证Django应用

Django 企业内网Kerberos免密登录配置方案

1. 基础环境准备

  • 确保Django服务器已接入企业Kerberos域(或能正常访问域控KDC服务器)
  • 安装核心依赖包:python-gssapi(处理Kerberos认证逻辑)、django-auth-kerberos(简化Django集成的工具包,也可自行实现认证逻辑)
  • 为Django服务创建Kerberos服务主体,格式为HTTP/你的Django服务器域名@企业Kerberos域,导出对应的keytab文件到服务器,将文件权限设为600,属主改为运行Django的系统用户

2. Django核心配置修改

2.1 替换认证后端

在settings.py中调整认证后端顺序,优先使用Kerberos认证:

AUTHENTICATION_BACKENDS = [
    'django_auth_kerberos.backends.KerberosBackend',
    # 如需保留LDAP同步用户信息功能,可保留LDAP后端
    'django_auth_ldap.backend.LDAPBackend',
]

2.2 配置Kerberos参数

在settings.py中添加Kerberos专属配置:

KRB5_REALM = 'YOUR_COMPANY_DOMAIN.COM'  # 替换为企业实际Kerberos域
KRB5_SERVICE_PRINCIPAL = 'HTTP/your-django-server.your-company.com@YOUR_COMPANY_DOMAIN.COM'
KRB5_KEYTAB = '/opt/django/service.keytab'  # keytab文件的实际路径
KRB5_USERNAME_ATTR = 'sAMAccountName'  # 对应AD/LDAP中的用户名属性

2.3 添加认证中间件

将Kerberos中间件加入MIDDLEWARE列表,放在AuthenticationMiddleware之前:

MIDDLEWARE = [
    # 其他已有中间件...
    'django_auth_kerberos.middleware.KerberosMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 其他已有中间件...
]

3. 客户端浏览器配置

确保域内用户的浏览器自动发送Kerberos票据:

  • Chrome/Edge:进入chrome://settings/security,将Django服务器域名添加到「本地Intranet」站点,开启「自动登录到Intranet站点」选项
  • Firefox:在about:config中设置network.negotiate-auth.trusted-uris为Django服务器域名

4. 用户信息同步(可选)

如果需要从LDAP同步用户邮箱、部门等额外信息,可结合django-auth-ldap配置,Kerberos认证通过后自动拉取LDAP数据:

# settings.py中LDAP配置示例
AUTH_LDAP_SERVER_URI = 'ldap://dc.your-company.com'
AUTH_LDAP_BIND_DN = 'CN=LDAP绑定账号,OU=服务账号,DC=your-company,DC=com'
AUTH_LDAP_BIND_PASSWORD = '绑定账号密码'
AUTH_LDAP_USER_SEARCH = LDAPSearch(
    'OU=用户组,DC=your-company,DC=com',
    ldap.SCOPE_SUBTREE,
    '(sAMAccountName=%(user)s)'
)
AUTH_LDAP_USER_ATTR_MAP = {
    'first_name': 'givenName',
    'last_name': 'sn',
    'email': 'mail'
}

5. 测试与调试

  • 启动Django服务,用域内已登录的电脑访问应用,应直接进入登录状态
  • 若认证失败,检查Kerberos日志(Linux为/var/log/krb5kdc.log,Windows查看事件查看器),重点排查keytab权限、服务主体是否匹配
  • 可在服务器上用kinit命令验证服务主体有效性:kinit -kt /opt/django/service.keytab HTTP/your-django-server.your-company.com@YOUR_COMPANY_DOMAIN.COM

内容的提问来源于stack exchange,提问作者CodeComet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:37:13