在 docker 中使用 kerberos 和 openldap 进行单点登录
SSO with kerberos and openldap in docker
我正在尝试创建一个测试环境,它可以帮助我使用 kerberos 实施 SSO 身份验证(生产环境是客户,所以我无法直接访问它)。我开始在 docker 中设置自己的环境。应用程序基于前端的反应并调用 node.js REST API (express)
我的计划是设置
- 包含用户和组的 LDAP 结构
- 从 node.js 后端访问 LDAP
- 使用 LDAP 用户名和密码回退进行身份验证
- 使用 LDAP 设置 KERBEROS
- 将 pc(win, mac) 添加到域
- 使用来自浏览器的票证对 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测试环境,其中包括:
- 带有 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 user/password 回退在此体系结构中是一种不好的做法。尽管如此,您也可以通过 Passport 以这种方式建立您的身份验证过程,我还没有尝试过,但是 passport-ldapauth 包似乎适合这个。
我正在尝试创建一个测试环境,它可以帮助我使用 kerberos 实施 SSO 身份验证(生产环境是客户,所以我无法直接访问它)。我开始在 docker 中设置自己的环境。应用程序基于前端的反应并调用 node.js REST API (express)
我的计划是设置
- 包含用户和组的 LDAP 结构
- 从 node.js 后端访问 LDAP
- 使用 LDAP 用户名和密码回退进行身份验证
- 使用 LDAP 设置 KERBEROS
- 将 pc(win, mac) 添加到域
- 使用来自浏览器的票证对 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测试环境,其中包括:
- 带有 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 user/password 回退在此体系结构中是一种不好的做法。尽管如此,您也可以通过 Passport 以这种方式建立您的身份验证过程,我还没有尝试过,但是 passport-ldapauth 包似乎适合这个。