Node.js中Sequelize ORM切换Kerberos认证及Python3.7配置方案
Node.js Sequelize 替换 NTLM 为 Kerberos 认证方案
无需更换 ORM:Sequelize 支持 Kerberos 认证
Sequelize 本身不直接处理认证逻辑,依赖底层数据库驱动实现 Kerberos 支持,针对常用数据库的配置方式如下:
SQL Server(使用 tedious 驱动)
- 安装依赖:
npm install sequelize tedious kerberos
- 配置示例:
const { Sequelize } = require('sequelize'); const sequelize = new Sequelize({ dialect: 'mssql', host: 'your-db-host', database: 'your-db-name', dialectOptions: { authentication: { type: 'kerberos', options: { realm: 'YOUR-REALM.COM', // 你的 Kerberos 领域 userName: 'your-domain-username', password: 'your-password' // 若系统已缓存 Kerberos 票据,可省略用户名/密码 } } } });
PostgreSQL(使用 pg 驱动)
- 安装依赖:
npm install sequelize pg pg-kerberos
- 配置示例:
const sequelize = new Sequelize('postgres://your-user@your-db-host/your-db-name', { dialectOptions: { ssl: true, krbsrvname: 'postgres' // PostgreSQL 的 Kerberos 服务名 } });
Python 3.7 环境安装与配置 Kerberos
针对不同操作系统,步骤如下:
Linux(Ubuntu/Debian)
- 安装系统依赖:
sudo apt-get update && sudo apt-get install krb5-user libkrb5-dev
- 安装 Python 包:
pip install kerberos
- 配置 Kerberos 领域:
编辑/etc/krb5.conf,添加基础配置:
[libdefaults] default_realm = YOUR-REALM.COM dns_lookup_realm = false dns_lookup_kdc = true [realms] YOUR-REALM.COM = { kdc = kdc.your-realm.com # KDC 服务器地址 admin_server = admin.your-realm.com # 管理服务器地址 }
- 获取 Kerberos 票据:
kinit your-username@YOUR-REALM.COM
输入密码后,用 klist 可查看已获取的票据。
Windows
- 安装 Python 依赖:
pip install pywin32 kerberos
- 配置系统 Kerberos 领域:
打开命令提示符(管理员权限)执行:
ksetup /setrealm YOUR-REALM.COM ksetup /addkdc YOUR-REALM.COM kdc.your-realm.com
- 获取票据:
kinit your-domain-username
输入密码后,用 klist 验证票据状态。
macOS
- 安装系统依赖(通过 Homebrew):
brew install krb5
- 设置环境变量(让 pip 找到 Kerberos 库):
export PATH="/usr/local/opt/krb5/bin:$PATH" export LDFLAGS="-L/usr/local/opt/krb5/lib" export CPPFLAGS="-I/usr/local/opt/krb5/include"
- 安装 Python 包:
pip install kerberos
- 配置
/etc/krb5.conf(同 Linux 配置格式),然后执行kinit获取票据。
验证安装
运行以下 Python 代码测试 Kerberos 功能:
import kerberos # 替换为你的服务标识 service = 'HTTP@your-service-host' result, ctx = kerberos.authGSSClientInit(service) kerberos.authGSSClientStep(ctx, '') token = kerberos.authGSSClientResponse(ctx) print(f"生成的 Kerberos 令牌:{token}") kerberos.authGSSClientClean(ctx)
内容的提问来源于stack exchange,提问作者Shiva Priya
相关产品推荐
相关产品推荐

