身份验证模式¶
默认情况下,目录使用内部数据库进行用户管理和身份验证。但是,还有其他一些可用的身份验证机制:
要使用的模式是在哪种模式下配置的 WEB-INF/config-security/config-security.xml
或通过环境变量 config.security.type
。
取消注释中的相关行 WEB-INF/config-security/config-security.xml
:
<import resource="config-security-{mode}.xml"/>
配置LDAP¶
Lightweight Directory Access Protocol (LDAP) 使GeoNetwork能够验证远程身份存储的用户名和密码。LDAP实施使用默认的地理网络登录用户界面元素。
GeoNetwork目前有两种配置LDAP的方法。另请验证中的替代方法 配置LDAP-层次结构 。
LDAP配置在中定义 WEB-INF/config-security/config-security.properties
,然后可以配置环境以更新上一个文件或重写文件中的属性 WEB-INF/config-security/config-security-overrides.properties
.
定义LDAP连接:
ldap.base.provider.url
:这告诉门户LDAP服务器所在的位置。确保具有目录的计算机可以与具有LDAP服务器的计算机进行连接。检查以确保适当的端口已打开等。ldap.base.dn
:这通常看起来像:“dc= [此处显示组织名称] ,dc=组织”ldap.security.principal
/ldap.security.credentials
:定义用于绑定到LDAP的LDAP管理员用户。如果未定义,则进行匿名绑定。Principal是用户名,credentials属性是密码。
# LDAP security properties ldap.base.provider.url=ldap://localhost:389 ldap.base.dn=dc=fao,dc=org ldap.security.principal=cn=admin,dc=fao,dc=org ldap.security.credentials=ldap
要验证设置是否正确,请尝试使用LDAP浏览器应用程序连接到LDAP服务器。
定义在LDAP结构中查找用户进行身份验证的位置:
ldap.base.search.base
:这是目录将查找用户进行身份验证的位置。ldap.base.dn.pattern
:这是用户要绑定的可分辨名称。{0}将替换为在登录屏幕中键入的用户名。
ldap.base.search.base=ou=people ldap.base.dn.pattern=uid={0},${ldap.base.search.base} #ldap.base.dn.pattern=mail={0},${ldap.base.search.base}
配置LDAP-层次结构¶
在2020年年中引入了一种稍有不同的LDAP配置方法。
这扩展了原始的配置基础设施(原始配置仍然可以正常工作,没有任何更改)。
在开始配置之前,您需要知道;
LDAP服务器的URL
登录LDAP服务器(执行查询)的用户名/密码
查找用户的LDAP查询(给定用户在登录屏幕上输入的内容)
如何将用户的LDAP属性转换为用户的网络属性
查找用户所属组的LDAP查询
如何将LDAP组转换为GeoNetwork组/配置文件
注解
有一个 video developer chat 这将详细介绍如何配置LDAP,包括设置一个预先配置的LDAP服务器(使用apachedirectorystudio)进行测试/调试/学习。
注解
我应该使用层次结构还是原始配置?
如果您已经有一个现有的(原始)配置,就不需要移动到新的配置。两者之间的大部分代码是相同的。
如果您正在启动一个新的配置,我建议您使用层次结构配置。它更简单一些,并且由测试用例和测试基础设施支持。它还支持ldap,其中用户/组位于多个目录中。
配置LDAP bean(层次结构)¶
GeoNetwork附带了一个示例LDAP配置,您可以在ApacheDirectoryStudio中使用它来创建测试用例中使用的相同的LDAP服务器。还有一个连接到这个LDAP服务器的geonnetwork配置示例。请看 README.md 或 video developer chat 以获取指示。
注解
要使用此配置,请取消对“<import resource=“config security ldap”的注释-递归.xml“/>”行输入 web/src/main/webapp/WEB-INF/config-security/config-security.xml
配置 contextSource bean,其中包含对LDAP服务器的引用和可以执行LDAP查询的用户。
<bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> <constructor-arg value=“ldap://localhost:3333/dc=example,dc=com"/> <property name="userDn" value="cn=admin,ou=GIS Department,ou=Corporate Users,dc=example,dc=com"/> <property name="password" value="admin1"/> </bean>
配置 ldapUserSearch 带有用于查找用户的查询的bean(给定在登录页面中键入的内容)。
注:设置 searchSubtree 到 true 对LDAP进行递归搜索。使用 searchBase 控制搜索从哪个目录开始(“”表示从根目录开始)。
<bean id="ldapUserSearch" class="…"> <constructor-arg name="searchBase" value=""/> <constructor-arg name="searchFilter" value="(sAMAccountName={0})"/> <constructor-arg name="contextSource" ref="contextSource"/> <property name="searchSubtree" value="true"/> </bean>
配置 ldapUserContextMapper 如何将LDAP用户的属性转换为geonnetwork用户属性的bean(请参阅上面的原始配置文档)。
注:该 value 部分有两部分。第一部分是LDAP属性的名称(可以为空)。如果LDAP属性丢失或为空,则第二部分是默认值(请参阅上面的原始配置文档)。
<bean id="ldapUserContextMapper" class=“LDAPUserDetailsContextMapperWithProfileSearchEnhanced"> <property name="mapping"> <map> <entry key="name" value="cn,"/> <entry key="surname" value="sn,"/> <entry key="mail" value="mail,"/> <entry key="organisation" value=","/> <entry key="address" value=","/> <entry key="zip" value=","/> <entry key="state" value=","/> <entry key="city" value=","/> <entry key="country" value=","/> <entry key="profile" value=",RegisteredUser"/> <entry key="privilege" value=",none"/> </map> </property> </bean>
继续配置 ldapUserContextMapper 这样LDAP也可以为用户提供组/配置文件角色。
注:该 ldapMembershipQuery 成员资格查询将在其中启动的LDAP目录(“”表示从LDAP的根目录开始)。
<bean id="ldapUserContextMapper" class="LDAPUserDetailsContextMapperWithProfileSearchEnhanced"> <property name="importPrivilegesFromLdap" value=“true"/> <!-- typically, don't want GN to modify the LDAP server! --> <property name="createNonExistingLdapGroup" value="false" /> <property name="createNonExistingLdapUser" value="false" /> <property name="ldapManager" ref="ldapUserDetailsService" /> <property name="membershipSearchStartObject" value=""/> <property name="ldapMembershipQuery" value="(&(objectClass=*)(member=cn={2})(cn=GCAT_*))"/> </bean>
继续配置 ldapUserContextMapper 这样LDAP角色就可以转换为GeoNetwork组/配置文件。
注意:您可以使用多个 ldapRoleConverters .
<bean id="ldapUserContextMapper" class="LDAPUserDetailsContextMapperWithProfileSearchEnhanced"> <property name="ldapRoleConverters"> <util:list> <ref bean="ldapRoleConverterGroupNameParser"/> </util:list> </property> </bean>
目前有两种方法可以将LDAP组转换为GeoNetwork组/概要文件。
这个 LDAPRoleConverterGroupNameParser ,其工作原理与原始LDAP配置相同。它使用正则表达式将LDAP组名解析为GeoNetwork组/概要文件。这将转换LDAP角色 GCAT_GENERAL_EDITOR 加入GeoNetwork组 GENERAL 带侧断面 Editor.
<bean id="ldapRoleConverterGroupNameParser" class="LDAPRoleConverterGroupNameParser"> <property name="ldapMembershipQueryParser" value="GCAT_(.*)_(.*)"/> <property name="groupIndexInPattern" value="1"/> <property name="profileIndexInPattern" value=“2"/> <property name="profileMapping"> <map> <entry key="ADMIN" value="Administrator"/> <entry key="EDITOR" value="Editor"/> </map> </property> </bean>
还有一种更直接的方法 LDAPRoleConverterGroupNameConverter . 这将直接将LDAP组名转换为geonnetwork组/概要文件的列表。
<bean id=“ldapRoleConverterGroupNameParser" class="LDAPRoleConverterGroupNameConverter"> <property name="convertMap"> <map> <entry> <key> <value>HGIS_GeoNetwork_Admin</value> </key> <list> <bean class="org.fao.geonet.kernel.security.ldap.LDAPRole"> <constructor-arg name="groupName" type="java.lang.String" value="myGroup"/> <constructor-arg name="profileName" type="java.lang.String" value="Administrator"/> </bean> </list> </entry> <entry> <key> <value>HGIS_GeoNetwork_Editor</value> </key> <list> <bean class="org.fao.geonet.kernel.security.ldap.LDAPRole"> <constructor-arg name="groupName" type="java.lang.String" value=“myGroup"/> <constructor-arg name="profileName" type="java.lang.String" value="Editor"/> </bean> </list> </entry> </map> </property> </bean>
配置CA¶
要启用CAS,请通过包括 WEB-INF/config-security/config-security-cas.xml
在里面 WEB-INF/config-security/config-security.xml
,取消注释以下行:
<import resource="config-security-cas.xml"/>
<import resource="config-security-cas-ldap.xml"/>
CAS可以使用LDAP或数据库进行用户管理。要使用数据库,请取消对以下行的注释:
<import resource="config-security-cas.xml"/>
<import resource="config-security-cas-database.xml"/>
CAS配置在中定义 WEB-INF/config-security/config-security.properties
. 可以通过更新上一个文件或在文件中定义属性重写来配置环境 WEB-INF/config-security/config-security-overrides.properties
:
cas.baseURL=https://localhost:8443/cas
cas.ticket.validator.url=${cas.baseURL}
cas.login.url=${cas.baseURL}/login
cas.logout.url=${cas.baseURL}/logout?url=${geonetwork.https.url}/
配置密钥罩¶
Keycloak 是一种软件解决方案,可方便存储身份验证详细信息、用户联合、身份代理和社交登录。可以将GeoNetwork设置为使用密钥罩实例进行身份验证。
根据说明安装KeyCloak,或在Docker https://www.keycloak.org/getting-started/getting-started-docker中使用此示例设置
密钥罩详细信息是通过环境变量定义的
KEYCLOAK_AUTH_SERVER_URL={keycloak url} KEYCLOAK_REALM={realm name} KEYCLOAK_RESOURCE={client name} KEYCLOAK_SECRET={client secret} KEYCLOAK_DISABLE_TRUST_MANAGER={true|false}
您可以通过编辑该文件来设置更多高级密钥遮盖设置 WEB-INF/config-security/keycloak.json
GeonNetwork客户端URL配置¶
确保在配置客户端时设置了有效的重定向URI,以将URI重定向到Geonnetwork安装。即https://localhost:8443/geonetwork/*.如果设置不正确,您可能会收到指示提供了错误的重定向URI的错误信息。此外,如果要测试客户端反向通道注销,请确保还将管理员URL设置为geonnetwork安装。
示例用户/角色/组设置¶
角色设置示例¶
在您的客户端角色设置中(Clients->MyClient->Roles)。添加以下角色
Administrator RegisteredUser Guest sample:UserAdmin sample:Reviewer sample:Editor sample:RegisteredUser
样例组配置¶
转到钥匙披风组(左侧菜单)。
创建名为“Administrator”的新组
编辑组。转到Role Mappings->Client Roles(Myclient)->选择管理员角色,然后单击“Add Selected”任何加入管理员组的用户都将成为Geonnetwork管理员。
示例用户配置¶
转到键盘遮盖用户(左侧菜单)
添加或选择现有用户。然后转到该用户。
转到Role Mappings->Client Roles(Myclient)->选择要应用的可用角色,然后单击“Add Selected”或转到Groups->Available Groups->单击Administrator Group,然后单击“Join”
中描述了Geoserver的类似设置 geoserver documentation 。
配置Shibboleth¶
目录可以在SAML安全联盟中操作。Shibboleth应该安装在Apache中,如前所述 here . 目录是通过Apache访问的。通过包括 WEB-INF/config-security/config-security-shibboleth.xml
在里面 WEB-INF/config-security/config-security.xml
. 然后可以在中配置环境 config-security-shibboleth-overrides.properties
.