我正在尝试创建一个测试环境,它将帮助我使用 kerberos 实现 SSO 身份验证(生产环境是客户,因此我无法直接访问它)。我开始在 Docker 中设置自己的环境。应用程序前端基于react并调用node.js REST API(express)
我的计划是设置
- 包含用户和组的 LDAP 结构
- 从 Node.js 后端访问 LDAP
- 使用 LDAP 用户名和密码进行后备验证
- 使用 LDAP 设置 KERBEROS
- 将 pc(win、mac)添加到域
- 使用浏览器中的票证对 kerberos 进行身份验证
我成功完成了步骤 1-3。我正在使用 OpenLdap在 docker 中运行的事件目录的镜像(可以通过域名访问,例如 ldap.example.com )。我可以管理用户和组,还可以使用管理员/技术用户从后端访问 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 上尝试过这个。我可以看到网络帐户服务器并且可以成功添加它,但是当我打开目录实用程序并尝试添加 Active Directory 域时,它失败并出现一般错误无法联系身份验证服务器
。
但主要问题是 LDAP 和 kerberos 镜像之间的连接,我尝试了几种配置,但仍然无法弄清楚如何在 kerberos 身份验证中使用 ldap 用户凭据。
最佳答案
我针对这些问题做了一个功能齐全的Docker测试环境,其中包括:
- 具有 Kerberos 架构的 OpenLDAP,因此在第一次运行时它与此兼容:https://github.com/nugaon/docker-openldap-with-kerberos
- 具有 OpenLDAP 正确连接配置的 Kerberos:https://github.com/nugaon/docker-kerberos-with-ldap
- 自动连接到 Kerberos 环境的 NodeJS 容器:https://github.com/nugaon/docker-nodejs-with-kerberos
- Passport Kerberos 身份验证器,用 TypeScript 编写,与较新版本的 Kerberos 兼容(还有如何配置浏览器以使用 Kerberos 进行身份验证的说明):https://github.com/nugaon/passport-kerberos-negotiation
我建议使用dpage/pgadmin4用于 LDAP 手动配置(用户、组等)的图像。
在此架构中,LDAP 用户/密码回退是一种不好的做法。不过,您也可以通过 Passport 以这种方式建立身份验证过程,我还没有尝试过,但是 passport-ldapauth包似乎很适合这个。
关于node.js - docker 中使用 kerberos 和 openldap 进行 SSO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57757381/