在 docker 中使用 kerberos 和 openldap 进行单点登录

SSO with kerberos and openldap in docker

我正在尝试创建一个测试环境,它可以帮助我使用 kerberos 实施 SSO 身份验证(生产环境是客户,所以我无法直接访问它)。我开始在 docker 中设置自己的环境。应用程序基于前端的反应并调用 node.js REST API (express)

我的计划是设置

  1. 包含用户和组的 LDAP 结构
  2. 从 node.js 后端访问 LDAP
  3. 使用 LDAP 用户名和密码回退进行身份验证
  4. 使用 LDAP 设置 KERBEROS
  5. 将 pc(win, mac) 添加到域
  6. 使用来自浏览器的票证对 kerberos 进行身份验证

我成功完成了步骤 1-3。我正在为活动目录使用 OpenLdap 图像,其中 运行 在 docker 中(可以通过域名访问 ldap.example.com )。我可以管理用户和组,也可以使用 admin/tech 用户从后端访问 LDAP 并检索数据。我可以使用他的 ldap 用户名 (uid) 和密码对用户进行身份验证。

问题是kerberos。我使用 kerberos docker 图像,我正在尝试设置它来验证 LDAP 用户。

krb5.conf

[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = LDAP.EXAMPLE.COM

[realms]
LDAP.EXAMPLE.COM = {
   kdc = ldap.example.com
   admin_server = admin
}

另一个问题是将 PC 添加到域中。我只在 mac 上试过这个。我可以看到网络帐户服务器并且可以成功添加它,但是当我打开目录实用程序并尝试添加活动目录域时,它失败并出现一般错误 Authentication server could not be contacted.

但主要问题是 LDAP 和 kerberos 映像之间的连接,我尝试了几种配置但仍然无法弄清楚如何在 kerberos 身份验证中使用 ldap 用户凭据。

我针对这些问题制作了一个功能齐全的Docker测试环境,其中包括:

我建议使用 dpage/pgadmin4 图像进行 LDAP 手动配置(用户、组等)。

LDAP user/password 回退在此体系结构中是一种不好的做法。尽管如此,您也可以通过 Passport 以这种方式建立您的身份验证过程,我还没有尝试过,但是 passport-ldapauth 包似乎适合这个。