问题描述
我希望通过“轻量级目录访问协议”(LDAP) 身份验证,为“模型管理器服务器”配置外部身份验证,以允许用户使用其域帐户进行登录。但目前尚不清楚应如何填写 LDAP 登录模块配置框。
解决方法
LDAP 登录模块作为“模型管理器服务器”外部身份验证配置,其工作原理是将输入的用户名和密码与 LDAP 目录(例如 Windows Active Directory)中存储的用户凭据进行验证。
本解决方法演示了如何使用免费的 Apache Directory Studio™ 工具来准备 LDAP 登录模块的配置设置。有关更多信息,请参阅 Model Manager Server Manual 的 External Authentication 页面以及 Java® 的 LdapLoginModule 文档。
使用 Apache Directory Studio 准备配置
设置 Apache Directory Studio
从 https://directory.apache.org/studio/downloads.html 下载适配的 Apache Directory Studio 安装包,并将其解压至计算机上的合适位置。
从 https://adoptium.net/temurin/releases/?package=jre&version=11 下载 Java 11 runtime 压缩包,并将其解压至 Apache Directory Studio 文件夹。
将解压后的 Java runtime 文件夹(位于 Apache Directory Studio 文件夹中)重命名为
jre
,确保 Apache Directory Studio 能够正确识别和使用该运行环境。
连接到 LDAP 服务器
- 启动 Apache Directory Studio。
- 建议在安装有“模型管理器服务器”的计算机上运行 Apache Directory studio,以便该工具使用与服务器相同的网络接口。如果无法这样操作,例如服务器计算机不允许运行 GUI 工具,请参阅下文通过 SSH 隧道连接。
- 在 LDAP 菜单中选择 New Connection。
- 在 New LDAP Connection 对话框中进行如下设置:
- 在 Connection name 框中输入连接的描述性文本,例如“我的连接”。
- 在 Hostname 框中填写 LDAP 服务器的主机名。如果使用 SSL 加密 (LDAPS),请务必使用完全限定的主机名,以确保服务器身份与其证书匹配。
- 在 Port 框中填写要连接到 LDAP 服务器的 TCP 端口。LDAP 的默认端口号为 389,LDAPS 为 636;但对于 Windows Active Directory 服务器,建议改用端口 3268 (LDAP) 和 3269 (LDAPS) 以访问全局目录。
- 对于 Encryption method,可以选择 No encryption (LDAP) 或 Use SSL encryption (LDAPS),LDAP 登录模块仅支持这两种方式。请确保端口号与加密方法兼容。
- 单击 Check Network Parameter 以验证是否能连接 LDAP 服务器,然后单击 Next。
- 如果您收到关于由于颁发者未知而导致证书无效的警告,请在确认为可信的自签名证书的情况下选择信任该证书。此时,可能还需要执行下文信任 LDAP 服务器证书 中的步骤,确保“模型管理器服务器”也信任该证书。
- 输入用于 LDAP 服务器身份验证的用户名和密码。您可能需要添加域前缀 (
username@example.com
) 或后缀 (EXAMPLE\username
)。请记录此处使用的用户名格式,后续将在“模型管理器服务器”的外部身份验证页面上 LDAP 登录模块的身份验证标识框中使用相同格式。 - 单击 Check Authentication 以确认您可以进行身份验证,然后单击 Finish。
可选操作:通过 SSH 隧道连接
如果您在非“模型管理器服务器”本机上运行 Apache Directory Studio,可以使用 SSH 隧道连接至 LDAP 服务器,使该工具看起来像是在“模型管理器服务器”本机上运行,并通过其网络接口进行连接。此方法要求您能够使用支持本地隧道功能的 SSH 客户端连接至“模型管理器服务器”计算机:
- 在运行 Apache Directory Studio 的计算机上打开命令提示符 (Windows) 或终端 (Linux/macOS)。
- 运行
ssh -L8888:ldaphostname:ldapport username@serverhostname
,其中 8888 为本地任意端口,ldaphostname:ldapport
为 LDAP 服务器的主机名和端口,username@serverhostname
为“模型管理器服务器”计算机的主机名及用于连接的用户名。 - SSH 连接成功后,按照前述连接到 LDAP 服务器 的步骤进行设置,但在 New LDAP Connection 对话框的 Hostname 中填写
localhost
,在 Port 中填写 8888。Encryption method 的设置应与直接从“模型管理器服务器”计算机连接时保持一致。 - 对
localhost:8888
的连接将通过 SSH 隧道转发至serverhostname
,再由该主机连接至ldaphostname:ldapport
。 - 只要 SSH 连接保持开启,隧道就处于打开状态,请在使用 Apache Directory Studio 期间保持
ssh
命令运行。
如果您怀疑防火墙可能阻止“模型管理器服务器”连接 LDAP 服务器,通过服务器将工具连接进行隧道转发是一种有效的做法。如果连接被阻止,可在执行 Check Network Parameter 步骤时立即发现问题,从而优先排查并修复防火墙配置。
定位用户提供方文件夹
- 连接到 LDAP 服务器后,转到 LDAP Browser 视图,并展开 DIT 节点以浏览目录树。
- 找到一个合适的顶层文件夹,其子树中应该包含能够登录的所有用户。 如果用户分布在目录的多个分支下,请选择靠近目录树顶部的文件夹,以覆盖所有位置。
- 右键单击该文件夹,选择 Advanced > Copy URL,并将该 URL 保存备用,用于外部身份验证页面上的用户提供方编辑框。
生成用户过滤器
- 在目录中找到一个应具有登录权限的典型用户,可以通过手动浏览目录或使用 Navigate > Go to DN 功能(如果您知道用户的专有名称,例如
DN=John Smith
)进行查找。 - 在用户的属性列表中,选择值为
user
的objectClass
属性。 - 然后,按住 Ctrl 键,向下滚动以查找并选择包含用户名的适当属性(例如在 Active Directory 中为
sAMAccountName
)。 - 最后,查看是否存在表示用于登录服务器的强制组成员资格的任何
memberOf
属性,并使用 Ctrl 键一并选择。 - 选择所有相关属性后,右键单击并选择 Advanced > Copy AND Search Filter,将该过滤器保存备用,用作外部身份验证页面上用户过滤器框的模板。
注: 如果在目录中找不到典型用户,还可以尝试使用以下常见的用户过滤器之一继续操作:
- Active Directory:
(&(sAMAccountName={USERNAME})(objectclass=user))
- OpenLDAP:
(&(uid={USERNAME})(objectClass=inetOrgPerson))
可选:为可选的组成员资格生成过滤器
对于其他任何非强制性的组成员资格,如需在“模型管理器服务器”中将其映射至用户组以实现访问控制,可执行以下操作。
- 与上述生成用户过滤器的方法类似,找到具有可选组成员资格的代表性用户,并选择其属性。
- 生成一个搜索过滤器并将其保存,用于外部身份验证页面上其他可选 LDAP 登录模块实例中的用户过滤器框。
配置模型管理器服务器
配置外部身份验证
- 以根管理员身份登录“模型管理器服务器”Web 界面。
- 依次进入管理 > 系统 > 外部身份验证,然后单击编辑。
- 添加 LDAP 登录模块,并将其控制标志设为必备,表示该模块是必需的,如果此登录模块不成功,身份验证链将停止。
- 在用户提供方编辑框中,输入在上述定位用户提供方文件夹 中复制的 URL。
- 在用户过滤器框中,输入在生成用户过滤器 中复制的搜索过滤器,但将其中的真实用户名替换为字符串令牌
{USERNAME}
。例如,如果复制的搜索过滤器为(&(objectClass=user)(sAMAccountName=john))
,应写为(&(objectClass=user)(sAMAccountName={USERNAME}))
。LDAP 登录模块在搜索用户凭据时,会将该令牌替换为尝试登录用户的用户名。 - 在身份验证标识框中,输入您在连接到 LDAP 服务器 中使用的用户名格式,但将真实用户名替换为字符串令牌
{USERNAME}
。例如,如果您使用zoe@example.com
登录,则填写{USERNAME}@example.com
。LDAP 登录模块在对 LDAP 服务器进行身份验证时,会将令牌替换为尝试登录用户的用户名。 - 如果您在 Apache Directory Studio 中使用了加密(可通过用户提供方 URL 以
ldaps://
开头判断),请保持使用 SSL 处于启用状态,否则将其切换为禁用。建议使用加密,以避免用户名和密码以明文形式发送至 LDAP 服务器。 - 单击测试,并使用一组已知的用户凭据来确认身份验证功能是否正常。如果可能,建议既使用应具有访问权限的用户凭据进行测试,也使用凭据有效但不应具有访问权限的用户凭据进行测试。
- 如果启用了 SSL 并遇到以
SunCertPathBuilderException
异常结尾的异常链,提示消息unable to find valid certification path to requested target
,请参阅下面的信任 LDAP 服务器证书,确保服务器证书受信任。
- 如果启用了 SSL 并遇到以
- 单击保存并确认用户可以登录。
可选:映射默认的“模型管理器”用户组
如果希望所有通过配置外部身份验证 中所输入的外部身份验证配置登录的用户可以自动指派到某个特定的“模型管理器”用户组,请按照以下步骤操作。
- 编辑外部身份验证配置,并在授权标识框中为要指派的组填写唯一标识符。例如,如果该组名为
engineering
,可以填写engineering-user-group
。 - 添加一个组映射,将主体名称设置为该唯一标识符(例如
engineering-user-group
),并将映射组设置为组名engineering
。 - 保存配置,并确认使用外部身份验证登录的用户在我的帐户页面(位于“模型管理器服务器”Web 页面右上角的帐户菜单中)上显示已映射的组。
可选:映射可选的“模型管理器”用户组
如果您已按照前文为可选的组成员资格生成过滤器 中的步骤生成了搜索过滤器,并希望利用这些过滤器将可选的外部组成员资格映射到“模型管理器服务器”用户组,请执行以下步骤。
- 编辑外部身份验证配置,并添加另一个 LDAP 登录模块。将控制标志设为可选,这意味着即使该模块验证失败,身份验证也能够成功。
- 使用与上述配置外部身份验证 中相同的值填写用户提供方和身份验证标识。
- 在用户过滤器框中填写可选组成员资格的搜索过滤器,像之前一样将用户名替换为
{USERNAME}
。 - 在授权标识中填写可选组成员资格的唯一标识符。
- 为可选组成员资格添加另一个组映射,使用该唯一标识符作为主体名称,并使用可选用户组名称作为组名,类似于前文映射默认的“模型管理器”用户组 中的操作说明。
- 单击测试以确认当目录中的用户具有可选组的成员资格时,该组是否成功映射。
- 对所有其他可选用户组重复上述操作。
- 保存配置,并验证可选用户组映射是否成功。
如果需要:服务器证书管理
信任 LDAP 服务器证书
如果需要,请根据安装“模型管理器服务器”的操作系统,按照以下操作说明进行操作,确保“模型管理器服务器”信任 LDAPS 服务器的证书。
首先,需要确定 LDAPS 服务器证书链的根证书,通常为您所在组织的本地 CA 证书。如果尚未以文件形式获取该证书,请参见下文的获取 LDAPS 服务器的证书链。
待信任的证书可以存放在运行“模型管理器服务器”的计算机上的任意临时位置,证书导入信任存储库后(如下所述),将不再使用该证书文件,您可以将其从临时位置移除。
在 Windows(限 6.2 及更高版本的“模型管理器服务器”)上
从 6.2 版本开始,“模型管理器服务器”使用 Windows 操作系统内置的信任存储库,因此,您只需将根证书导入 Windows 信任存储库即可。
- 在 Windows 中启动内置的
certlm.msc
工具,然后导航至受信任的根证书颁发机构 > 证书文件夹。 - 从操作菜单中选择导入,然后单击下一步以指定要导入的文件。
- 单击浏览或键入证书路径,将其作为受信任的根证书导入。
- 依次单击下一步、下一步和完成,并确认该证书显示在列表中。
在 Linux®、macOS 或 Windows(限 6.1 及更低版本的“模型管理器服务器”)上
在 Linux 和 macOS 系统(以及安装了 COMSOL 6.2 之前版本的 Windows 系统)中,“模型管理器服务器”使用安装目录中 Java runtime 自带的信任存储库。
- 找到“模型管理器服务器”安装目录中包含的 Java
keytool
的路径。- 在 Linux 系统中,默认路径为:
/usr/local/comsol62/modelmanagerserver/java/glnxa64/jre/bin/keytool
- 在 macOS 系统中,默认路径为:
/Applications/COMSOL62/ModelManagerServer/java/maci64/jre/bin/keytool
- 在 Windows 系统中,默认路径为:
C:\Program Files\COMSOL\COMSOL62\ModelManagerServer\java\win64\jre\bin\keytool.exe
- 如果使用基于 ARM64 的平台,请将
glnxa64
和maci64
分别替换为glnxarm64
和macarm64
。
- 在 Linux 系统中,默认路径为:
- 使用
-importcert -cacerts -file myrootcert.pem -alias myrootcert
变元运行keytool
,其中-file
变元应指向要导入的根证书,-alias
是该根证书在信任存储库中的别名。- 运行该命令时需要具有对安装目录的写权限。
- 使用的别名必须在密钥库中唯一,无需与文件名一致。如果要导入多个根证书,请为每个证书设置不同的别名。
- 输入 Java
cacerts
文件的密码,默认为changeit
。 - 查看证书信息,如系统询问是否导入,请回答
yes
。- 如果出现 "Certificate not imported, alias
already exists" 错误,表示该别名已被使用。请更换别名,或使用 -delete -cacerts -alias myrootcert
先删除现有根证书,再导入一个新证书。
- 如果出现 "Certificate not imported, alias
- 重新启动“模型管理器服务器”,使其开始使用导入的证书。
注:如果系统中安装有多个 COMSOL 软件版本,请务必找到所用版本的“模型管理器服务器”安装目录,并从该目录下的 Java runtime 运行 keytool
。特别需要注意的是,对于 COMSOL Multiphysics 而言,不需要信任其 LDAP 服务器的服务器证书。
获取 LDAPS 服务器的证书链
“模型管理器服务器”安装包中包含 Java keytool
,其默认路径详见前文信任 LDAP 服务器证书 一节。
- 运行带有变元
-printcert -rfc -sslserver hostname:port
的keytool
,其中hostname:port
是 LDAPS 服务器的主机名和安全端口。- 如果出现 "No certificate from the SSL server" 错误,请确认主机名填写正确(不包含
ldaps://
前缀),并确保所用端口为安全的 LDAPS 端口,而不是服务器上非安全的 LDAP 端口。
- 如果出现 "No certificate from the SSL server" 错误,请确认主机名填写正确(不包含
- 输出应为以
-----BEGIN CERTIFICATE-----
开头、以-----END CERTIFICATE-----
结尾的代码块。将最后一个此类块复制到剪贴板,通常这是对应于证书链的根证书。 - 将该代码块粘贴至文本编辑器中,并将文件保存为
myrootcert.pem
,存放在任意临时位置。
注: 请确保您在受信任的网络环境中连接 LDAPS 服务器,否则可能存在通过中间人攻击获取伪造证书链的风险。为了降低此类攻击的风险,建议在获取证书链后,通过可信渠道与服务器管理员沟通,以验证根证书的指纹信息,再决定是否信任该证书。
COMSOL 尽一切合理的努力验证您在此页面上查看的信息。本页面提供的资源和文档仅供参考,COMSOL 对其有效性不作任何明示或暗示的声明。COMSOL 对所披露数据的准确性不承担任何法律责任。本文档中引用的任何商标均为其各自所有者的财产。有关完整的商标详细信息,请参阅产品手册。