身元検証モード

デフォルトの場合,ディレクトリは内部データベースを用いてユーザ管理と認証を行う.しかし他にも利用可能な認証機構があります

使用するモードはどのモードで配置されていますか 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がリモートIDに格納されているユーザ名とパスワードを検証できるようにする.LDAPはデフォルトのGeoNetworkを用いてユーザインタフェース要素を登録する.

GeoNetworkにはLDAPを配置する2つの方法がある.また、検証中の代替方法を確認してください LDAP階層構造の構成 それがそうです。

LDAP構成は中で定義されている WEB-INF/config-security/config-security.properties その後、環境を構成して、以前のファイルを更新したり、ファイルの属性を上書きしたりすることができます。 WEB-INF/config-security/config-security-overrides.properties それがそうです。

  1. LDAP接続の定義:

    • ldap.base.provider.url :ポータルLDAPサーバの位置を示す.ディレクトリを含む計算機がLDAPサーバを持つ計算機にアクセスできることを確保する.適切なポートが開いていることを確認するためにチェックする、など。

    • ldap.base.dn :これは通常、“dc=と同様である。 [組織名はここにあります] DC=org“

    • ldap.security.principalldap.security.credentials :LDAPにバインドするためのLDAP管理者ユーザを定義する.定義されていなければ,匿名バインディングを行う.エージェントはパスワードのユーザ名と証明書属性である.

    # 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サーバに接続してみてください。

  2. 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を用いた場合,LDAP属性からGeoNetworkのユーザ情報や権限を定義することができる.

ユーザ情報

ディレクトリデータベースからLDAP属性にマッチするユーザ属性ごとに構成されたLDAPからユーザ情報を検索することができる.属性が空または定義されていない場合、デフォルト値を定義することができる。属性値は区切られた2つの部分からなる , 性格。第1の部分は属性名であり、第2の部分はデフォルト値であり、属性名が定義されていない場合やLDAP内の属性値が空にならないようにする。

構成は以下のとおりである.

# Map user information to LDAP attributes and default values
# ldapUserContextMapper.mapping[name]=ldap_attribute,default_value
ldapUserContextMapper.mapping[name]=cn,
ldapUserContextMapper.mapping[surname]=givenName,
ldapUserContextMapper.mapping[mail]=mail,data@myorganization.org
ldapUserContextMapper.mapping[organisation]=,myorganization
ldapUserContextMapper.mapping[kind]=,
ldapUserContextMapper.mapping[address]=,
ldapUserContextMapper.mapping[zip]=,
ldapUserContextMapper.mapping[state]=,
ldapUserContextMapper.mapping[city]=,
ldapUserContextMapper.mapping[country]=,

権限配置

ユーザグループやユーザプロファイルはLDAP情報に応じて設定してもよいし,設定しなくてもよい.デフォルトの場合,ローカルデータベースからユーザ権限を管理する.LDAP情報を使用してユーザ権限を定義すべき場合は、 ldap.privilege.import 財産性. true

ldap.privilege.import=true

LDAPから権限を導入する場合,ディレクトリ管理者はLDAPで定義されているがローカルデータベースに定義されていないグループを作成することを決定することができる.そのため、以下の属性をtrueに設定してください。

ldap.privilege.create.nonexisting.groups=false

ユーザがどのグループに属し、ユーザがどのプロファイルに属するかを定義するために:

ldapUserContextMapper.mapping[privilege]=groups,sample
# If not set, the default profile is RegisteredUser
# Valid profiles are http://geonetwork-opensource.org/manuals/trunk/eng/developer/apidocs/geonetwork/org/fao/geonet/constants/Geonet.Profile.html
ldapUserContextMapper.mapping[profile]=privileges,RegisteredUser

属性構成:

  • 権限属性は,そのユーザが属するグループを含む.複数のグループを許可する。

  • プロファイル属性には、ユーザのプロファイルが含まれています。

ユーザ有効プロファイルは、:

  • 管理人

  • UserAdmin

  • 査読者.

  • 編者.

  • RegisteredUser

  • 来賓.

プロファイルを含むLDAP属性がディレクトリプロファイルリストと一致しない場合、マッピングを定義することができる:

# Map LDAP custom profiles to catalog profiles. Not used if ldap.privilege.pattern is defined.
ldapUserContextMapper.profileMapping[Admin]=Administrator
ldapUserContextMapper.profileMapping[Editor]=Reviewer
ldapUserContextMapper.profileMapping[Public]=RegisteredUser

たとえば,前の構成では,属性値は Admin マッピングすることができます Administrator (これはディレクトリの有効な構成ファイルです)。

属性は,ユーザのプロファイルやグループを定義することができる.この情報を抽出するためには、属性に基づいてユーザ権限を充填するためのカスタムパターンを定義することができる:

  1. プロファイルのための属性を定義し、グループのための属性を定義する WEB-INF/config-security/config-security-overrides.properties

# In config-security-overrides.properties
ldapUserContextMapper.mapping[privilege]=cat_privileges,sample
  1. 権限のための属性を定義し、カスタムモードを定義します。

# In config-security.properties
ldap.privilege.pattern=CAT_(.*)_(.*)
ldap.privilege.pattern.idx.group=1
ldap.privilege.pattern.idx.profil=2

Beanを起用する ldapUserContextMapper 上の LDAPUserDetailsContextMapperWithPattern 入力 ``WEB-INF/config-security/config-security-ldap.xml` )。

  <!--<bean id="ldapUserContextMapper"
      class="org.fao.geonet.kernel.security.ldap.LDAPUserDetailsContextMapper">
      <property name="mapping">
        <map/>
      </property>
      <property name="profileMapping">
        <map/>
      </property>
      <property name="ldapBaseDn" value="${ldap.base.dn}"/>
      <property name="importPrivilegesFromLdap" value="${ldap.privilege.import}"/>
      <property name="createNonExistingLdapGroup"
                value="${ldap.privilege.create.nonexisting.groups}"/>
      <property name="createNonExistingLdapUser" value="${ldap.privilege.create.nonexisting.users}"/>
      <property name="ldapManager" ref="ldapUserDetailsService"/>
      <property name="contextSource" ref="contextSource"/>
      <property name="ldapUsernameCaseInsensitive" value="${ldap.usernameCaseInsensitive:#{true}}"/>
  </bean>-->

  <bean id="ldapUserContextMapper" class="org.fao.geonet.kernel.security.ldap.LDAPUserDetailsContextMapperWithPattern">
    <property name="mapping">
        <map/>
    </property>
    <property name="profileMapping">
        <map/>
    </property>
    <property name="importPrivilegesFromLdap" value="${ldap.privilege.import}"/>
    <property name="createNonExistingLdapGroup" value="${ldap.privilege.create.nonexisting.groups}" />
    <property name="createNonExistingLdapUser" value="${ldap.privilege.create.nonexisting.users}" />

    <property name="ldapManager" ref="ldapUserDetailsService" />

    <property name="privilegePattern" value="${ldap.privilege.pattern}" />
    <property name="groupIndexInPattern" value="${ldap.privilege.pattern.idx.group}"/>
    <property name="profilIndexInPattern" value="${ldap.privilege.pattern.idx.profil}"/>

    <property name="contextSource" ref="contextSource" />
</bean>
  1. 抽出グループとロールのカスタム位置を定義する(グループ/ロールの組合せをサポートしない)(config-security.xml中のLDAP UserDetailsContextMapperWithProfileSearchを用いる).

ldap.privilege.search.group.attribute=cn
ldap.privilege.search.group.object=ou=groups
#ldap.privilege.search.group.query=(&(objectClass=*)(memberUid=uid={0},${ldap.base.search.base},${ldap.base.dn})(cn=EL_*))
ldap.privilege.search.group.queryprop=memberuid
ldap.privilege.search.group.query=(&(objectClass=*)(memberUid=uid={0},${ldap.base.search.base},${ldap.base.dn})(|(cn=SP_*)(cn=EL_*)))
ldap.privilege.search.group.pattern=EL_(.*)
ldap.privilege.search.privilege.attribute=cn
ldap.privilege.search.privilege.object=ou=groups
ldap.privilege.search.privilege.query=(&(objectClass=*)(memberUid=uid={0},${ldap.base.search.base},${ldap.base.dn})(cn=SV_*))
ldap.privilege.search.privilege.pattern=SV_(.*)

LDAP属性は、例えば、異なるタイプのユーザを定義するための以下の構成を含むことができる。

cat_privileges=CAT_ALL_Administrator

-- Define a reviewer for the group GRANULAT
cat_privileges=CAT_GRANULAT_Reviewer

-- Define a reviewer for the group GRANULAT and editor for MIMEL
cat_privileges=CAT_GRANULAT_Reviewer
cat_privileges=CAT_MIMEL_Editor

-- Define a reviewer for the group GRANULAT and editor for MIMEL and RegisteredUser for NATURA2000
cat_privileges=CAT_GRANULAT_Reviewer
cat_privileges=CAT_MIMEL_Reviewer
cat_privileges=CAT_NATURA2000_RegisteredUser

-- Only a registered user for GRANULAT
cat_privileges=CAT_GRANULAT_RegisteredUser

シンクロ

同期タスクは,削除可能なLDAPユーザの削除を担当する.例えば:

  • T 0:ユーザAがディレクトリに登録する.ローカルユーザAは、ユーザデータベースに作成される。

  • T 1:ユーザAはLDAPから削除する(ユーザAはディレクトリに登録できない).

  • T 2:同期タスクLDAPにすべてのローカルLDAPユーザが存在するかどうかをチェックする:

    • ユーザが何の記録もなければ、それは削除されるだろう。

    • ユーザがメタデータレコードを持っていれば,ディレクトリ記録システムに警告メッセージを書き込む.タスクが現在の所有者を削除することができる前に、レコードの所有者は他のユーザに変更されるべきである。

デフォルトの場合,そのタスクは1日1回実行される.この設定は、以下のプロパティで変更できます。

# Run LDAP sync every day at 23:30
ldap.sync.cron=0 30 23 * * ?

以下の属性は、高度な構成同期プロセスを可能にします。

ldap.sync.user.search.base=${ldap.base.search.base}
ldap.sync.user.search.filter=(&(objectClass=*)(mail=*@*)(givenName=*))
ldap.sync.user.search.attribute=uid
ldap.sync.group.search.base=ou=groups
ldap.sync.group.search.filter=(&(objectClass=posixGroup)(cn=EL_*))
ldap.sync.group.search.attribute=cn
ldap.sync.group.search.pattern=EL_(.*)

誤りを除く.

接続に失敗した場合は、中LDAPのログレベルの向上を試みてください WEB-INF/classes/log4j.xml

<logger name="geonetwork.ldap" additivity="false">
    <level value="DEBUG"/>
</logger>

またはConfiguration Settings(構成設定)から設定 Log level 至る DEV 臨時:

../../_images/setting-log-level.png

LDAP階層構造の構成

2020年にはやや異なるLDAP配置方法が導入された.

これは、元の構成インフラストラクチャを拡張する(元の構成は、何の変更もなく有効である)。

構成を開始する前に、以下のことを理解する必要があります。

  1. LDAPサーバ向けURL

  2. クエリーを実行するためにLDAPサーバにログインするためのユーザ名/パスワード

  3. ユーザのLDAPクエリの検索(ユーザがログイン画面にキー入力したコンテンツを与える)

  4. LDAPユーザの属性をGeoNetworkユーザ属性に変換する方法に関する詳細な情報

  5. ユーザが所属するグループを検索するためのLDAPクエリ

  6. LDAPグループを地理ネットワークグループ/プロファイルに変換する方法

注釈

ある video developer chat これは,テスト/デバッグ/学習のための事前構成を設定したLDAPサーバ(Apache Directory Studioを使用)を含むLDAPを構成する方法について詳しく説明する.

注釈

私は階層構造を使うべきですか、それとも元の構成を使うべきですか?

既存の(元の)構成を持っている場合、新しい構成に移動する必要はありません。両者の間のコードの大部分は同じである.

もしあなたが新しい構成を始めるなら、私はあなたが階層構成を使用することをお勧めします。それは少し簡単で、テストケースとテストインフラの支援を受けた。また、ユーザ/グループが複数のディレクトリに位置するLDAPをサポートしている。

LDAP Beanの構成

GeoNetworkにはLDAP構成例が付属しており,テストケースで使用されているLDAPサーバと同様のLDAPサーバを作成するためにApache Directory Studioで使用することができる.このLDAPサーバに接続された例としてGeoNetwork構成がある.ご参照ください README.md あるいは…。 video developer chat 説明を得る。

注釈

この構成を使用するには、注釈中の“<import resource=”config-security-ldap-recursive.xml“/>”行をキャンセルしてください web/src/main/webapp/WEB-INF/config-security/config-security.xml

  1. 配置 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>
    
  2. 配置 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>
    
  3. 配置 ldapUserContextMapper Beanは,LDAPユーザの属性をGeoNetworkユーザ属性に変換する方法を紹介する(上記のオリジナル構成文書を参照).

    注: value 部分は2つの部分からなる.第1部分はLDAP属性の名前(空であってもよい)である.LDAP属性が欠落している場合、または空である場合、第2の部分はデフォルト値です(上記の元の構成文書を参照)。

    <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>
    
  4. 配置を継続する ldapUserContextMapper Beanであるため,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="(&amp;(objectClass=*)(member=cn={2})(cn=GCAT_*))"/>
    
    </bean>
    
  5. 配置を継続する ldapUserContextMapper Beanは,LDAPロールをGeoNetworkグループ/プロファイルに変換できるようにしている.

    注意:複数ご利用いただけます ldapRoleConverters それがそうです。

    <bean id="ldapUserContextMapper" class="LDAPUserDetailsContextMapperWithProfileSearchEnhanced">
    
       <property name="ldapRoleConverters">
         <util:list>
           <ref bean="ldapRoleConverterGroupNameParser"/>
         </util:list>
       </property>
    
    </bean>
    

LDAPグループを地理ネットワークグループ/プロファイルに変換する方法が2つある.

  • ♪the 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グループ名を地理ネットワークグループ/プロファイルリストに直接変換する.

    <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>
    

CASを構成する

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"/>

CAは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は鍵カバー事例を用いて認証を行うように設定することができる.

その説明に基づいてKeyloakをインストールするか、docker https://www.keycloak.org/Get-Started/Get-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が設定されていることを確保し,Geonnetwork実装にURIをリダイレクトする.すなわちhttps://localhost:8443/geonnetwork/*である.設定が正しくない場合、エラーのリダイレクトURIが提供されていることを示すエラーメッセージが受信される可能性があります。また、クライアントのリバースチャネルのログアウトをテストする場合は、管理者URLをgeonnetworkに設定してインストールすることも確認してください。

ユーザ/ロール/グループ設定例

役割設定例

クライアントロール設定(Clients->MyClient->Roles)です。以下の役割を追加する

Administrator
RegisteredUser
Guest
sample:UserAdmin
sample:Reviewer
sample:Editor
sample:RegisteredUser

サンプルグループ構成

  1. キーマントセット(左メニュー)に移ります。

  2. “Administrator”という新しいグループを作成します

  3. 編集班です。Role Mappings->Client Roles(MyClient)->管理者役を選択し、“Add Selected”をクリックして管理者グループに参加する任意のユーザがGeonnetwork管理者となります。

ユーザ構成の例

  1. キーボードマントユーザー(左側メニュー)に移行

  2. 既存のユーザーを追加または選択します。そしてそのユーザに移ります。

  3. Role Mappings->Client Roles(Myclient)->アプリケーションに利用可能なロールを選択し、“Add Selected”をクリックし、またはGroups->Available Groups->Administrator Groupをクリックし、“Join”をクリックします。

Geoserverの同様の設定について説明した. geoserver documentation それがそうです。

Shibbolethの構成

ディレクトリはSAMLセキュリティの連携で実行可能である.Shibbolethは説明に従ってApacheに実装されなければならない here それがそうです。このディレクトリはApacheを介してアクセスされる.以下の設定を含むShibboleth認証による WEB-INF/config-security/config-security-shibboleth.xml はい。 WEB-INF/config-security/config-security.xml それがそうです。そして、環境を構成することができます config-security-shibboleth-overrides.properties それがそうです。