Nexus Repository OSS 3.x的LDAP配置

LDAP简介

LDAP(Lightweight Directory Access Protocol),译为轻型目录访问协议, 是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。 LDAP中可以保存结构化的用户、系统、网络、服务和应用,并且提供给局域网或广域网访问。

虽然LDAP可以是一个很复杂的东西,但目前最常用的方式,还是维护一个公司、组织里所有人的用户信息, 实现一个账户,多个子系统共用的需求。

Nexus Repository OSS支持创建自定义用户,也支持LDAP功能。 在Pro版,还额外支持一个Crowd,它是LDAP的一个商业替代品。

本文介绍如何在界面上配置Nexus Repository OSS 3.x的LDAP,以及记录一些坑。

操作综述

为Nexus Repository OSS 3.x添加LDAP支持,总共分三步:

  1. 在【Administration】【Realms】配置中,把LDAP Realm设为Active。
  2. 在【Administration】【LDAP】配置中,添加一个Connection,点击【Create connection】。
  3. 在【Administration】【Roles】中配置中,按照LDAP的组来添加权限配置。

1、3两步略,下面简单介绍如何添加一个Connection。

Create connection

一个Connection,其实就是一个LDAP连接。 这个页面,配置连接到一个LDAP服务器所需的全部信息。

Name可以随便填。

LDAP server address则需要填写LDAP服务器的IP。 协议可选ldap或ldaps,而端口则取决于配置。 如果没有特殊配置,ldap默认端口是389,而ldap则是636。

Search base只需要填DC即可,比如DC=example,DC=com。 其它内容,比如CNOU等,不需要填写。

Authentication method有以下选项:

通常选择Simple Authentication即可。

Username or DN、Password里填写账户、密码,而 Connection rules无需修改。

填写完毕后,点击【Verify connection】按钮,可以验证信息。 如果成功,即可保存。

User and group

保存了Connection后,会出现一个【User and group】的标签页。 这个页面,进一步配置LDAP的用户与用户组的相关信息。

在最开头的Configuration template中,有四种模板可选:

这是自动配置以下信息的模板,对真正的配置起预设作用。 通常选择第一个即可。

Base DN里无须填写DC,这在前一页的Search base里已经填过了。 按照实际的LDAP配置,填写对应信息即可,比如OU=people

User subtree通常需要勾选。 如果把LDAP的Tree比作目录的话,勾选以后相当于递归查找子目录。 多一点信息,往往比少一点信息,更不容易出错。

User filter通过过滤规则,减少搜索信息,用于提升性能。 仅仅只是提升性能,所以,如果不懂它特殊的匹配规则,也可以不填。

在前面选择模板为Active Directory后,User ID attribute默认为sAMAccountName、 Real name attribute默认为cn、Email attribute默认为mail、Password attribute为空。 通常都可以不改,或者也可以按需修改。

Map LDAP groups as roles如果不勾选,就不会同步用户组信息。 如果勾选,则可以选择Group type和Group member of attribute。 若无必要,保持默认即可。

填写完毕后,通过【Verify user mapping】可以验证查询结果。 如果查询失败、或者查询结果为空,都需要重新调整配置。 验证成功后,还可以通过【Verify login】的尝试输入LDAP里的账户、密码。

查看LDAP用户

在【Administration】【Users】配置中,在Source里选择LDAP,可以查看LDAP用户。 在前面的验证步骤都成功的前提下,如果出现以下显示, 则需要点击右上角的刷新按钮(不是浏览器的刷新),同步LDAP服务器数据。

No LDAP user matched query criteria

通过搜索找到指定用户后,可以对该用户单独配置权限。

常见错误

前四个是【Connection】标签页的,后一个是【User and group】标签页的。

拒绝连接

Failed to connect to LDAP Server: 10.xxx.x.40:389 [Caused by java.net.ConnectException: Connection refused (Connection refused)]

原因通常是10.xxx.x.40:389这里的地址、端口有误。

超时

Failed to connect to LDAP Server: example.com:389 [Caused by java.net.SocketTimeoutException: connect timed out]

原因通常是域名有误,dc=example,dc=com这里可能需要修改。

Search base有误

Failed to connect to LDAP Server: [LDAP: error code 32 - 0000208D: NameErr: DSID-0310020A, problem 2001 (NO_OBJECT), data 0, best match of: 'DC=example,DC=com' ]

在【Connection】这个标签页,Search base填写DC=example,DC=com就够了,不需要写CNOU等其它参数。

用户名、密码有误

Failed to connect to LDAP Server: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A8, comment: AcceptSecurityContext error, data 52e, v1db1]

Base DN有误

Failed to connect to LDAP Server: Failed to retrieve ldap information for users. [Caused by javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-0310020A, problem 2001 (NO_OBJECT), data 0, best match of: 'DC=example,DC=com' ]]

Base DN这一栏,填写CN或者OU就够了,要确保正确。 不需要写DC,因为前面Search base已经写过了。

参考


相关笔记