9.3. 인증 구성 마이그레이션


이 섹션에서는 Elytron에 대한 속성 기반 인증 및 권한 부여에 대한 정보를 제공합니다. 또한 캐싱을 사용하여 Elytron에 캐싱을 사용하는 LDAP 인증, 데이터베이스 인증 구성, kerberos 인증, 복합 저장소, JACC 보안 및 보안 도메인 마이그레이션에 대한 정보도 포함되어 있습니다.

9.3.1. controlPlaneetBox 속성 기반 구성을 Elytron으로 마이그레이션

다음 예제를 사용하여 controlPlaneetBox 속성 기반 인증을 Elytron으로 마이그레이션합니다.

예: CryostatetBox 속성 기반 구성 명령

/subsystem=security/security-domain=application-security:add
/subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=UsersRoles, flag=Required, module-options={usersProperties=file://${jboss.server.config.dir}/example-users.properties, rolesProperties=file://${jboss.server.config.dir}/example-roles.properties}}])

그러면 다음 서버 구성이 생성됩니다.

예: CryostatetBox 속성 기반 보안 도메인 구성

<security-domain name="application-security">
  <authentication>
    <login-module code="UsersRoles" flag="required">
      <module-option name="usersProperties" value="file://${jboss.server.config.dir}/example-users.properties"/>
      <module-option name="rolesProperties" value="file://${jboss.server.config.dir}/example-roles.properties"/>
    </login-module>
  </authentication>
</security-domain>

9.3.1.1. Elytron으로 속성 기반 인증 마이그레이션

다음 단계에 따라 CryostatetBox 속성 기반 인증을 Elytron으로 마이그레이션합니다.

사전 요구 사항

마이그레이션하려는 배포된 웹 애플리케이션은 양식 기반 인증을 요구하도록 구성해야 합니다. 애플리케이션은 CryostatetBox 보안 도메인을 참조하고 있으며 UsersRolesLoginModule 을 사용하여 example-users.propertiesexample-roles.properties 파일에서 사용자 정보를 로드합니다. 이 절차에서는 보안 도메인이 다음 관리 CLI 명령을 사용하여 레거시 보안 하위 시스템에 정의되어 있다고 가정합니다.

CryostatetBox 속성 기반 인증으로 시작했는지 확인합니다.

프로세스

  1. elytron 하위 시스템에서 CryostatetBox 속성 파일을 참조하는 새 보안 영역을 정의합니다.

    /subsystem=elytron/properties-realm=application-properties:add(users-properties={path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true, digest-realm-name="Application Security"}, groups-properties={path=example-roles.properties, relative-to=jboss.server.config.dir}, groups-attribute=Roles)
  2. elytron 하위 시스템에서 보안 도메인 하위 시스템을 정의합니다.

    /subsystem=elytron/security-domain=application-security:add(realms=[{realm=application-properties}], default-realm=application-properties, permission-mapper=default-permission-mapper)

    그러면 서버 구성 파일에 다음과 같은 elytron 하위 시스템 구성이 생성됩니다.

    <subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
      ...
      <security-domains>
        ...
        <security-domain name="application-security" default-realm="application-properties" permission-mapper="default-permission-mapper">
          <realm name="application-properties"/>
        </security-domain>
      </security-domains>
      <security-realms>
        ...
        <properties-realm name="application-properties" groups-attribute="Roles">
          <users-properties path="example-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="Application Security" plain-text="true"/>
          <groups-properties path="example-roles.properties" relative-to="jboss.server.config.dir"/>
        </properties-realm>
      </security-realms>
      ...
    </subsystem>
  3. 배포에서 참조하는 애플리케이션 보안 도메인을 undertow 하위 시스템에서 새로 정의된 HTTP 인증 팩토리에 매핑합니다.

    /subsystem=undertow/application-security-domain=application-security:add(security-domain=application-security)

    그러면 서버 구성 파일에 다음과 같은 undertow 하위 시스템 구성이 생성됩니다.

    <subsystem xmlns="urn:jboss:domain:undertow:12.0">
      ...
      <application-security-domains>
        <application-security-domain name="application-security" security-domain="application-security"/>
      </application-security-domains>
      ...
    </subsystem>
  4. 새 애플리케이션 보안 도메인 매핑을 적용하려면 서버를 다시 로드하거나 애플리케이션을 재배포해야 합니다.

이제 인증이 picketBox 구성과 동일하게 구성됩니다.

9.3.2. 기존 보안 영역 속성 기반 구성을 Elytron으로 마이그레이션

이 섹션에서는 사용자, 암호 및 그룹 정보를 속성 파일에서 JBoss EAP 7.4 및 이전 버전에서 Elytron으로 로드하는 레거시 보안 영역을 마이그레이션하는 방법을 설명합니다. 이러한 유형의 기존 보안 영역은 일반적으로 관리 인터페이스를 보호하거나 커넥터를 제거하는 데 사용되었습니다.

JBoss EAP 8.0에서는 filesystem-realm이 properties-realm보다 선호됩니다.

사전 요구 사항

마이그레이션하려는 배포된 웹 애플리케이션은 양식 기반 인증을 요구하도록 구성해야 합니다. 애플리케이션은 CryostatetBox 보안 도메인을 참조하고 있으며 UsersRolesLoginModule 을 사용하여 example-users.propertiesexample-roles.properties 파일에서 사용자 정보를 로드합니다. 이 절차에서는 보안 도메인이 다음 관리 CLI 명령을 사용하여 레거시 보안 하위 시스템에 정의되어 있다고 가정합니다.

예: 레거시 보안 Cryostat 명령

/core-service=management/security-realm=ApplicationSecurity:add
/core-service=management/security-realm=ApplicationSecurity/authentication=properties:add(relative-to=jboss.server.config.dir, path=example-users.properties, plain-text=true)
/core-service=management/security-realm=ApplicationSecurity/authorization=properties:add(relative-to=jboss.server.config.dir, path=example-roles.properties)

그러면 다음 서버 구성이 생성됩니다.

예: 레거시 보안 설정

<security-realm name="ApplicationSecurity">
  <authentication>
    <properties path="example-users.properties" relative-to="jboss.server.config.dir" plain-text="true"/>
  </authentication>
  <authorization>
    <properties path="example-roles.properties" relative-to="jboss.server.config.dir"/>
  </authorization>
</security-realm>

Elytron 보안을 애플리케이션 서버에 추가하는 이유 중 하나는 서버에서 일관된 보안 솔루션을 사용할 수 있도록 하는 것이었습니다. 속성 기반 레거시 보안 영역을 Elytron으로 마이그레이션하기 위한 초기 단계는 Elytron으로 ChecketBox 속성 기반 인증을 마이그레이션하는 데 사용되는 것과 유사합니다. 다음 단계에 따라 속성 기반 레거시 보안 영역을 Elytron으로 마이그레이션합니다.

프로세스

  1. 속성 파일을 참조하는 elytron 하위 시스템에서 새 보안 영역을 정의합니다.

    /subsystem=elytron/properties-realm=application-properties:add(users-properties={path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true, digest-realm-name="Application Security"}, groups-properties={path=example-roles.properties, relative-to=jboss.server.config.dir}, groups-attribute=Roles)
  2. elytron 하위 시스템에서 보안 도메인 하위 시스템을 정의합니다.

    /subsystem=elytron/security-domain=application-security:add(realms=[{realm=application-properties}], default-realm=application-properties, permission-mapper=default-permission-mapper)

    그러면 다음과 같은 Elytron 구성이 생성됩니다.

    <subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
      ...
      <security-domains>
        ...
        <security-domain name="application-security" default-realm="application-properties" permission-mapper="default-permission-mapper">
          <realm name="application-properties"/>
        </security-domain>
      </security-domains>
      <security-realms>
        ...
        <properties-realm name="application-properties" groups-attribute="Roles">
          <users-properties path="example-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="Application Security" plain-text="true"/>
          <groups-properties path="example-roles.properties" relative-to="jboss.server.config.dir"/>
        </properties-realm>
      </security-realms>
        ...
    </subsystem>
  3. 기존 보안 영역을 SASL(Simple Authentication Security Layer) 인증에 사용할 수 있도록 sasl-authentication-factory 를 정의합니다.

    /subsystem=elytron/sasl-authentication-factory=application-security-sasl:add(sasl-server-factory=elytron, security-domain=application-security, mechanism-configurations=[{mechanism-name=PLAIN}])

    그러면 다음과 같은 Elytron 구성이 생성됩니다.

    <subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
      ...
      <sasl>
        ...
        <sasl-authentication-factory name="application-security-sasl" sasl-server-factory="elytron" security-domain="application-security">
          <mechanism-configuration>
            <mechanism mechanism-name="PLAIN"/>
          </mechanism-configuration>
        </sasl-authentication-factory>
        ...
      </sasl>
    </subsystem>
  4. SASL 인증에 대한 원격 커넥터를 구성하고 기존 보안 영역과의 연결을 제거합니다.

    /subsystem=remoting/http-connector=http-remoting-connector:write-attribute(name=sasl-authentication-factory, value=application-security-sasl)

    이렇게 하면 서버 구성 파일의 하위 시스템이 제거될 때 다음 구성이 생성됩니다.

    <subsystem xmlns="urn:jboss:domain:remoting:4.0">
      ...
      <http-connector name="http-remoting-connector" connector-ref="default" sasl-authentication-factory="application-security-sasl"/>
    </subsystem>
  5. 두 인증 팩토리를 추가하여 Elytron으로 http-interface 를 보호합니다.

    /subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=BASIC}])
    /core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade.sasl-authentication-factory, value=application-security-sasl)

    그러면 다음 구성이 생성됩니다.

    <management-interfaces>
      <http-interface http-authentication-factory="application-security-http">
        <http-upgrade enabled="true" sasl-authentication-factory="application-security-sasl"/>
        <socket-binding http="management-http"/>
      </http-interface>
    </management-interfaces>
    참고

    관리 인터페이스를 보호할 때 이 예제에서 사용된 이름으로 이름을 교체해야 합니다.

기존 속성 기반 구성을 Elytron으로 마이그레이션하는 작업이 완료되었습니다.

elytron.sh 툴의 filesystem-realm 명령을 사용하여 레거시 속성 기반 보안 영역을 Elytron의 파일 시스템 기반 영역으로 마이그레이션합니다.

파일 시스템 기반 영역은 Elytron에서 사용자 ID를 저장하는 데 사용하는 파일 시스템 기반 ID 저장소입니다. filesystem-realm 명령은 properties-realm 파일을 filesystem-realm 로 변환합니다. 또한 이 영역과 보안 도메인을 elytron 하위 시스템에 추가하기 위한 명령을 생성합니다.

프로세스

  1. 속성 파일을 마이그레이션합니다.

    한 번에 단일 user-properties 파일을 마이그레이션하거나 속성 파일을 대량으로 마이그레이션할 수 있습니다. 다음 예제에서는 두 가지 마이그레이션 유형에 대한 절차를 보여줍니다.

    • 단일 속성 파일을 마이그레이션하려면 다음을 수행합니다.

      다음 예제에서는 관련 roles-properties 파일을 사용하여 단일 users-properties 파일을 filesystem-realm 으로 변환합니다. 이 예제에서는 레거시 보안 도메인에 다음 user-properties 및 role-properties 파일이 있다고 가정합니다.

      example-users.properties
      example-roles.properties

      예: 단일 사용자 속성 파일 마이그레이션

      $./bin/elytron-tool.sh filesystem-realm --users-file example-users.properties --roles-file example-roles.properties --output-location realms/example

      이렇게 하면 filesystem-realm 파일과 관리 CLI 명령이 포함된 스크립트가 생성됩니다. 이 스크립트는 realms/example 디렉터리에 저장됩니다.

    • 여러 속성 파일을 마이그레이션하려면 다음을 수행합니다.

      다음 예제에서는 대용량의 roles-properties 파일을 사용하여 users-properties 파일을 filesystem-realm 으로 변환합니다. 이 예제에서는 레거시 보안 도메인에 다음과 같은 속성 파일이 있다고 가정합니다.

      users-1.properties
      users-2.properties
      roles-1.properties
      roles-2.properties

      user-roles 파일을 대량으로 변환하려면 filesystem-realm 명령과 함께 사용할 설명자 파일을 생성해야 합니다. 이 예에서는 /bin 디렉터리에 있는 설명자 파일 example-descriptor-file 은 다음 콘텐츠를 사용하여 생성됩니다.

      예: 설명자 파일

      users-file:/full/path/to/users-1.properties
      roles-file:/full/path/to/roles-1.properties
      output-location:./realms/bulk-1-example
      filesystem-realm-name:exampleFileSystemRealm1
      security-domain-name:exampleSecurityDomain1
      
      users-file:/full/path/to/users-2.properties
      roles-file:/full/path/to/roles-2.properties
      output-location:./realms/bulk-2-example
      filesystem-realm-name:exampleFileSystemRealm2
      security-domain-name:exampleSecurityDomain2

      설명자 파일의 빈 행은 각 users-properties 파일에 대한 작업을 분리하는 데 사용됩니다.

      다음 예제에서는 설명자 파일을 사용하여 관련 roles-properties 파일을 사용하여 두 users-properties 파일을 filesystem-realm 으로 변환합니다.

      예:ulk 마이그레이션

      $./bin/elytron-tool.sh filesystem-realm --bulk-convert example-descriptor-file

      이렇게 하면 관리 CLI 명령이 포함된 filesystem-realm 파일과 스크립트가 생성됩니다. 스크립트는 설명자 파일의 output-location 속성에 지정된 디렉터리에 저장됩니다.

  2. Elytron 툴에서 생성한 CLI 명령을 사용하여 새 보안 영역과 보안 도메인을 elytron 하위 시스템에 추가합니다.

    예: filesystem-realm 추가

    /subsystem=elytron/filesystem-realm=converted-properties-filesystem-realm:add(path=/full/path/to/realms/example)
    
    /subsystem=elytron/security-domain=converted-properties-security-domain:add(realms=[{realm=converted-properties-filesystem-realm}],default-realm=converted-properties-filesystem-realm,permission-mapper=default-permission-mapper)

9.3.4. LDAP 인증 구성을 Elytron으로 마이그레이션

정보를 ID 속성으로 관리할 수 있도록 레거시 LDAP 인증을 Elytron으로 마이그레이션합니다.

사전 요구 사항

기존 LDAP 인증을 Elytron으로 마이그레이션하기 전에 Migrate Properties-based Authentication and Authorization to Elytron 섹션에 있는 콘텐츠를 읽어야 합니다. 이 내용은 여기에도 적용됩니다. 보안 도메인 및 인증 팩토리를 정의하는 방법과 인증에 사용할 매핑 방법에 중점을 두어야 합니다. 이 섹션은 해당 지침을 반복하지 않으므로 계속하기 전에 해당 섹션을 읽도록 합니다.

다음 예제에서는 그룹 또는 역할 정보가 LDAP에서 직접 로드되고 기존 LDAP 인증이 다음과 같이 구성되어 있다고 가정합니다.

프로세스

  1. LDAP 서버에는 다음 사용자 및 그룹 항목이 포함되어 있습니다.

    예: LDAP 서버 사용자 항목

    dn: uid=TestUserOne,ou=users,dc=group-to-principal,dc=wildfly,dc=org
    objectClass: top
    objectClass: inetOrgPerson
    objectClass: uidObject
    objectClass: person
    objectClass: organizationalPerson
    cn: Test User One
    sn: Test User One
    uid: TestUserOne
    userPassword: {SSHA}UG8ov2rnrnBKakcARVvraZHqTa7mFWJZlWt2HA==

    예: LDAP 서버 그룹 항목

    dn: uid=GroupOne,ou=groups,dc=group-to-principal,dc=wildfly,dc=org
    objectClass: top
    objectClass: groupOfUniqueNames
    objectClass: uidObject
    cn: Group One
    uid: GroupOne
    uniqueMember: uid=TestUserOne,ou=users,dc=group-to-principal,dc=wildfly,dc=org

    인증을 위해 사용자 이름은 uid 속성과 일치하며 결과 그룹 이름은 그룹 항목의 uid 속성에서 가져옵니다.

  2. LDAP 서버 및 관련 보안 영역에 대한 연결은 다음 관리 CLI 명령을 사용하여 정의됩니다.

    예: LDAP Security Cryostat 구성 명령

    batch
    /core-service=management/ldap-connection=MyLdapConnection:add(url="ldap://localhost:10389", search-dn="uid=admin,ou=system", search-credential="secret")
    
    /core-service=management/security-realm=LDAPRealm:add
    /core-service=management/security-realm=LDAPRealm/authentication=ldap:add(connection="MyLdapConnection", username-attribute=uid, base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org")
    
    /core-service=management/security-realm=LDAPRealm/authorization=ldap:add(connection=MyLdapConnection)
    /core-service=management/security-realm=LDAPRealm/authorization=ldap/username-to-dn=username-filter:add(attribute=uid, base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org")
    /core-service=management/security-realm=LDAPRealm/authorization=ldap/group-search=group-to-principal:add(base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org", iterative=true, prefer-original-connection=true, principal-attribute=uniqueMember, search-by=DISTINGUISHED_NAME, group-name=SIMPLE, group-name-attribute=uid)
    run-batch

    그러면 다음 서버 구성이 생성됩니다.

    예: LDAP Security Cryostat 구성

    <management>
      <security-realms>
        ...
        <security-realm name="LDAPRealm">
          <authentication>
            <ldap connection="MyLdapConnection" base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org">
              <username-filter attribute="uid"/>
            </ldap>
          </authentication>
          <authorization>
            <ldap connection="MyLdapConnection">
              <username-to-dn>
                <username-filter base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org" attribute="uid"/>
              </username-to-dn>
              <group-search group-name="SIMPLE" iterative="true" group-name-attribute="uid">
                <group-to-principal search-by="DISTINGUISHED_NAME" base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org" prefer-original-connection="true">
                  <membership-filter principal-attribute="uniqueMember"/>
                </group-to-principal>
              </group-search>
            </ldap>
          </authorization>
        </security-realm>
      </security-realms>
      <outbound-connections>
        <ldap name="MyLdapConnection" url="ldap://localhost:10389" search-dn="uid=admin,ou=system" search-credential="secret"/>
      </outbound-connections>
      ...
    </management>

  3. 다음 관리 CLI 명령은 LdapExtLoginModule 을 사용하여 사용자 이름과 암호를 확인하는 데 사용하는 CryostatetBox 보안 도메인을 구성하는 데 사용됩니다.

    예: 보안 도메인 구성 명령

    /subsystem=security/security-domain=application-security:add
    /subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=LdapExtended, flag=Required, module-options={ java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url=ldap://localhost:10389, java.naming.security.authentication=simple, bindDN="uid=admin,ou=system", bindCredential=secret, baseCtxDN="ou=users,dc=group-to-principal,dc=wildfly,dc=org", baseFilter="(uid={0})", rolesCtxDN="ou=groups,dc=group-to-principal,dc=wildfly,dc=org", roleFilter="(uniqueMember={1})", roleAttributeID="uid" }}])

    그러면 다음 서버 구성이 생성됩니다.

    예: 보안 도메인 구성

    <subsystem xmlns="urn:jboss:domain:security:2.0">
      ...
      <security-domains>
        ...
        <security-domain name="application-security">
          <authentication>
            <login-module code="LdapExtended" flag="required">
              <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
              <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/>
              <module-option name="java.naming.security.authentication" value="simple"/>
              <module-option name="bindDN" value="uid=admin,ou=system"/>
              <module-option name="bindCredential" value="secret"/>
              <module-option name="baseCtxDN" value="ou=users,dc=group-to-principal,dc=wildfly,dc=org"/>
              <module-option name="baseFilter" value="(uid={0})"/>
              <module-option name="rolesCtxDN" value="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
              <module-option name="roleFilter" value="(uniqueMember={1})"/>
              <module-option name="roleAttributeID" value="uid"/>
            </login-module>
          </authentication>
        </security-domain>
      </security-domains>
    </subsystem>

9.3.4.1. 레거시 LDAP 인증을 Elytron으로 마이그레이션

다음 단계에 따라 이전 LDAP 인증 예제 구성을 JBoss EAP 7.4 및 이전 버전에서 Elytron으로 마이그레이션합니다. 이 섹션은 기존 보안 LDAP 영역 의 마이그레이션 및 picket Box LDAP 보안 도메인에 적용됩니다.

프로세스

  1. elytron 하위 시스템에서 LDAP에 대한 연결을 정의합니다.

    /subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin, ou=system", credential-reference={clear-text=secret})
  2. LDAP를 검색하고 제공된 암호를 확인하는 보안 영역을 생성합니다.

    /subsystem=elytron/ldap-realm=ldap-realm:add(dir-context=ldap-connection, direct-verification=true, identity-mapping={search-base-dn="ou=users, dc=group-to-principal, dc=wildfly, dc=org", rdn-identifier="uid", attribute-mapping=[{filter-base-dn="ou=groups, dc=group-to-principal, dc=wildfly, dc=org", filter="(uniqueMember={1})", from="uid", to="Roles"}]})

이러한 단계를 수행하면 서버 구성 파일에 다음과 같은 elytron 하위 시스템 구성이 생성됩니다.

<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
  ...
  <security-realms>
    ...
    <ldap-realm name="ldap-realm" dir-context="ldap-connection" direct-verification="true">
      <identity-mapping rdn-identifier="uid" search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org">
        <attribute-mapping>
          <attribute from="uid" to="Roles" filter="(uniqueMember={1})" filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
        </attribute-mapping>
      </identity-mapping>
    </ldap-realm>
  </security-realms>
  ...
  <dir-contexts>
    <dir-context name="ldap-connection" url="ldap://localhost:10389" principal="uid=admin,ou=system">
      <credential-reference clear-text="secret"/>
    </dir-context>
  </dir-contexts>
</subsystem>
참고

기본적으로 지정된 security-domain 에 대해 role-decoder 가 정의되지 않은 경우 "역할" ID 속성이 ID 역할에 매핑됩니다.

이제 LDAP에서 로드된 정보를 속성으로 ID와 연결할 수 있습니다. 이러한 속성은 역할에 매핑할 수 있지만 다른 용도로 로드 및 사용할 수도 있습니다. 새로 생성된 보안 영역은 이 가이드의 속성 기반 인증 및 권한 부여 섹션에 설명된 것과 동일한 방식으로 보안 도메인에서 사용할 수 있습니다.

9.3.5. 데이터베이스 인증 구성을 Elytron으로 마이그레이션

JDBC 데이터 소스 기반 CryostatetBox 인증을 Elytron으로 마이그레이션합니다. 보안 도메인 정의, 인증 팩토리를 정의하고 인증을 위해 매핑하는 방법은 속성 기반 인증 및 권한 부여 마이그레이션을 참조하십시오.

다음 예제에서는 사용자 인증 데이터가 다음 예제와 유사한 구문을 사용하여 생성된 데이터베이스 테이블에 저장된다고 가정합니다.

예: 데이터베이스 사용자 테이블을 만드는 구문

CREATE TABLE User (
    id BIGINT NOT NULL,
    username VARCHAR(255),
    password VARCHAR(255),
    role ENUM('admin', 'manager', 'user'),
    PRIMARY KEY (id),
    UNIQUE (username)
)

인증 목적을 위해 사용자 이름은 username 열에 저장된 데이터와 일치하며 암호 열에 암호 가 16으로 인코딩된 MD5 해시로 저장되고 권한 부여 목적으로 사용자 역할은 역할 열에 저장됩니다.

CryostatetBox 보안 도메인은 JBDC 데이터 소스를 사용하여 데이터베이스 테이블에서 데이터를 검색한 다음 이를 사용하여 사용자 이름과 암호를 확인하고 역할을 할당하도록 구성됩니다. picketBox 보안 도메인이 다음 관리 CLI 명령을 사용하여 구성되어 있다고 가정합니다.

예: CryostatetBox Database LoginModule 구성 명령

/subsystem=security/security-domain=application-security:add
/subsystem=security/security-domain=application-security/authentication=classic:add( login-modules=[ { code=Database, flag=Required, module-options={ dsJndiName="java:jboss/datasources/ExampleDS", principalsQuery="SELECT password FROM User WHERE username = ?", rolesQuery="SELECT role, 'Roles' FROM User WHERE username = ?", hashAlgorithm=MD5, hashEncoding=base64 } } ] )

그러면 레거시 보안 하위 시스템에 다음과 같은 로그인 모듈 구성이 생성됩니다.

예: CryostatetBox LoginModule 구성

<subsystem xmlns="urn:jboss:domain:security:2.0">
  <security-domains>
    ...
    <security-domain name="application-security">
      <authentication>
        <login-module code="Database" flag="required">
          <module-option name="dsJndiName" value="java:jboss/datasources/ExampleDS"/>
          <module-option name="principalsQuery" value="SELECT password FROM User WHERE username = ?"/>
          <module-option name="rolesQuery" value="SELECT role, 'Roles' FROM User WHERE username = ?"/>
          <module-option name="hashAlgorithm" value="MD5"/>
          <module-option name="hashEncoding" value="base64"/>
        </login-module>
      </authentication>
    </security-domain>
  </security-domains>
</subsystem>

9.3.5.1. 레거시 데이터베이스 인증을 Elytron으로 마이그레이션

JBoss EAP 7.4 및 이전 릴리스의 경우 이전 데이터베이스 인증 예제 구성을 Elytron으로 마이그레이션하려면 Elytron의 JDBC 데이터 소스 액세스를 활성화하는 JDBC 영역을 정의해야 합니다.

프로세스

  1. 다음 관리 명령을 사용하여 jdbc-realm 을 정의합니다.
/subsystem=elytron/jdbc-realm=jdbc-realm:add(principal-query=[ { data-source=ExampleDS, sql="SELECT role, password FROM User WHERE username = ?", attribute-mapping=[{index=1, to=Roles } ] simple-digest-mapper={algorithm=simple-digest-md5, password-index=2} } ] )

그러면 서버 구성 파일의 elytron 하위 시스템에 다음 jdbc-realm 구성이 생성됩니다.

<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
  ...
  <security-realms>
    ...
    <jdbc-realm name="jdbc-realm">
      <principal-query sql="SELECT role, password FROM User WHERE username = ?" data-source="ExampleDS">
        <attribute-mapping>
          <attribute to="Roles" index="1"/>
        </attribute-mapping>
        <simple-digest-mapper password-index="2"/>
      </principal-query>
    </jdbc-realm>
    ...
  </security-realms>
  ...
</subsystem>

Elytron은 이제 JDBC 영역 구성을 사용하여 데이터베이스 인증을 관리합니다. Elytron은 하나의 SQL 쿼리를 사용하여 모든 사용자 속성 및 자격 증명을 가져온 다음 SQL 결과에서 데이터를 추출하고 인증에 사용할 속성의 매핑을 생성하기 때문에 Elytron보다 효율적입니다.

9.3.6. Kerberos 인증을 Elytron으로 마이그레이션

Kerberos 구성으로 작업할 때 JBoss EAP 서버는 환경의 구성 정보를 사용하거나 시스템 속성을 사용하여 키 구성을 지정할 수 있습니다.

이러한 시스템 속성은 레거시 구성과 마이그레이션된 Elytron 구성에 모두 적용할 수 있습니다.

예: Kerberos 시스템 속성 관리 CLI 명령

# Enable debugging
/system-property=sun.security.krb5.debug:add(value=true)
# Identify the Kerberos realm to use
/system-property=java.security.krb5.realm:add(value=ELYTRON.ORG)
# Identify the address of the KDC
/system-property=java.security.krb5.kdc:add(value=kdc.elytron.org)

예: Kerberos 시스템 속성 서버 구성

<system-properties>
  <property name="sun.security.krb5.debug" value="true"/>
  <property name="java.security.krb5.realm" value="ELYTRON.ORG"/>
  <property name="java.security.krb5.kdc" value="kdc.elytron.org"/>
</system-properties>

인증 메커니즘에 따라 다음 마이그레이션 옵션 중 하나를 선택합니다.

9.3.6.1. Kerberos HTTP 인증 마이그레이션

기존 보안 구성에서 다음과 같이 HTTP 관리 인터페이스에 대해 CryostatEGO 인증을 사용하도록 보안 영역을 정의할 수 있습니다.

사전 요구 사항

다음 예제에서는 시스템 속성을 사용하여 Kerberos가 구성되어 있다고 가정합니다.

예: HTTP 관리 인터페이스에 CryostatEGO 인증 사용

/core-service=management/security-realm=Kerberos:add
/core-service=management/security-realm=Kerberos/server-identity=kerberos:add
/core-service=management/security-realm=Kerberos/server-identity=kerberos/keytab=HTTP\/test-server.elytron.org@ELYTRON.ORG:add(path=/path/to/test-server.keytab, debug=true)
/core-service=management/security-realm=Kerberos/authentication=kerberos:add(remove-realm=true)

예: Kerberos Security Cryostat 구성

<security-realms>
  ...
  <security-realm name="Kerberos">
    <server-identities>
      <kerberos>
        <keytab principal="HTTP/test-server.elytron.org@ELYTRON.ORG" path="/path/to/test-server.keytab" debug="true"/>
      </kerberos>
    </server-identities>
    <authentication>
      <kerberos remove-realm="true"/>
    </authentication>
  </security-realm>
</security-realms>

애플리케이션에서 Kerberos HTTP 인증을 사용할 수 있도록 기존 보안 도메인 쌍도 정의할 수 있습니다.

예: 여러 보안 도메인 정의

# Define the first security domain
/subsystem=security/security-domain=host:add
/subsystem=security/security-domain=host/authentication=classic:add
/subsystem=security/security-domain=host/authentication=classic/login-module=1:add(code=Kerberos, flag=Required, module-options={storeKey=true, useKeyTab=true, principal=HTTP/test-server.elytron.org@ELYTRON.ORG, keyTab=path/to/test-server.keytab, debug=true}

# Define the second SPNEGO security domain
/subsystem=security/security-domain=SPNEGO:add
/subsystem=security/security-domain=SPNEGO/authentication=classic:add
/subsystem=security/security-domain=SPNEGO/authentication=classic/login-module=1:add(code=SPNEGO, flag=requisite,  module-options={password-stacking=useFirstPass, serverSecurityDomain=host})
/subsystem=security/security-domain=SPNEGO/authentication=classic/login-module=1:write-attribute(name=module, value=org.jboss.security.negotiation)
/subsystem=security/security-domain=SPNEGO/authentication=classic/login-module=2:add(code=UsersRoles, flag=required, module-options={password-stacking=useFirstPass, usersProperties=  /path/to/kerberos/spnego-users.properties, rolesProperties=  /path/to/kerberos/spnego-roles.properties, defaultUsersProperties=  /path/to/kerberos/spnego-users.properties, defaultRolesProperties=  /path/to/kerberos/spnego-roles.properties})

예: 보안 도메인 한 쌍을 사용한 구성

<subsystem xmlns="urn:jboss:domain:security:2.0">
  <security-domains>
    ...
    <security-domain name="host">
      <authentication>
        <login-module name="1" code="Kerberos" flag="required">
          <module-option name="storeKey" value="true"/>
          <module-option name="useKeyTab" value="true"/>
          <module-option name="principal" value="HTTP/test-server.elytron.org@ELYTRON.ORG"/>
          <module-option name="keyTab" value="/path/to/test-server.keytab"/>
          <module-option name="debug" value="true"/>
        </login-module>
      </authentication>
    </security-domain>
    <security-domain name="SPNEGO">
      <authentication>
        <login-module name="1" code="SPNEGO" flag="requisite" module="org.jboss.security.negotiation">
          <module-option name="password-stacking" value="useFirstPass"/>
          <module-option name="serverSecurityDomain" value="host"/>
        </login-module>
        <login-module name="2" code="UsersRoles" flag="required">
          <module-option name="password-stacking" value="useFirstPass"/>
          <module-option name="usersProperties" value="path/to/kerberos/spnego-users.properties"/>
          <module-option name="rolesProperties" value="  /path/to/kerberos/spnego-roles.properties"/>
          <module-option name="defaultUsersProperties" value="  /path/to/kerberos/spnego-users.properties"/>
          <module-option name="defaultRolesProperties" value="  /path/to/kerberos/spnego-roles.properties"/>
        </login-module>
      </authentication>
    </security-domain>
  </security-domains>
</subsystem>

그런 다음 레거시 애플리케이션은 CryostatEGO 보안 도메인을 참조하고 CryostatEGO 메커니즘으로 보호됩니다.

9.3.6.1.1. Kerberos HTTP 인증을 Elytron으로 마이그레이션

보안 영역 및 Kerberos 보안 팩토리를 사용하여 Elytron에서 관리 인터페이스와 애플리케이션을 보호합니다.

사전 요구 사항

다음 예제에서는 시스템 속성을 사용하여 Kerberos가 구성되어 있다고 가정합니다.

프로세스

  1. ID 정보를 로드하는 데 사용할 보안 영역을 정의합니다.

    /subsystem=elytron/properties-realm=spnego-properties:add(users-properties={path=path/to/spnego-users.properties, plain-text=true, digest-realm-name=ELYTRON.ORG}, groups-properties={path=path/to/spnego-roles.properties})
  2. 서버가 자체 Kerberos ID를 로드할 수 있는 Kerberos 보안 팩토리를 정의합니다.

    /subsystem=elytron/kerberos-security-factory=test-server:add(path=path/to/test-server.keytab, principal=HTTP/test-server.elytron.org@ELYTRON.ORG, debug=true)
  3. 정책 및 인증 정책에 대한 HTTP 인증 팩토리를 함께 가져올 보안 도메인을 정의합니다.

    /subsystem=elytron/security-domain=SPNEGODomain:add(default-realm=spnego-properties, realms=[{realm=spnego-properties, role-decoder=groups-to-roles}], permission-mapper=default-permission-mapper)
    /subsystem=elytron/http-authentication-factory=spnego-http-authentication:add(security-domain=SPNEGODomain, http-server-mechanism-factory=global,mechanism-configurations=[{mechanism-name=SPNEGO, credential-security-factory=test-server}])

    그러면 서버 구성 파일의 elytron 하위 시스템에 다음 구성이 생성됩니다.

    예: 마이그레이션된 Elytron 구성

    <subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
      ...
      <security-domains>
      ...
        <security-domain name="SPNEGODomain" default-realm="spnego-properties" permission-mapper="default-permission-mapper">
          <realm name="spnego-properties" role-decoder="groups-to-roles"/>
        </security-domain>
      </security-domains>
      <security-realms>
        ...
        <properties-realm name="spnego-properties">
          <users-properties path="path/to/spnego-users.properties" digest-realm-name="ELYTRON.ORG" plain-text="true"/>
          <groups-properties path="path/to/spnego-roles.properties"/>
        </properties-realm>
      </security-realms>
      <credential-security-factories>
        <kerberos-security-factory name="test-server" principal="HTTP/test-server.elytron.org@ELYTRON.ORG" path="path/to/test-server.keytab" debug="true"/>
      </credential-security-factories>
      ...
      <http>
        ...
        <http-authentication-factory name="spnego-http-authentication" http-server-mechanism-factory="global" security-domain="SPNEGODomain">
          <mechanism-configuration>
            <mechanism mechanism-name="SPNEGO" credential-security-factory="test-server"/>
          </mechanism-configuration>
        </http-authentication-factory>
        ...
      </http>
      ...
    </subsystem>

  4. 애플리케이션을 보호하려면 undertow 하위 시스템에서 애플리케이션 보안 도메인을 정의하여 보안 도메인을 이 http-authentication-factory 에 매핑합니다. 이 구성에 정의된 http-authentication-factory 를 참조하도록 HTTP 관리 인터페이스를 업데이트할 수 있습니다. 이 프로세스는 Elytron으로 속성 기반 인증 및 권한 부여 마이그레이션에 설명되어 있습니다.

9.3.6.2. Kerberos Remoting SASL 인증 마이그레이션

다음 정보를 사용하여 Kerberos 원격 SASL 인증을 마이그레이션합니다.

프로세스

  1. 기본 관리 인터페이스와 같은 인증을 활성화하는 데 사용할 Kerberos / GSSAPI SASL 인증을 위한 레거시 보안 영역을 정의합니다.

예: 관리 CLI 명령 제거를 위한 Kerberos 인증

/core-service=management/security-realm=Kerberos:add
/core-service=management/security-realm=Kerberos/server-identity=kerberos:add
/core-service=management/security-realm=Kerberos/server-identity=kerberos/keytab=remote\/test-server.elytron.org@ELYTRON.ORG:add(path=path/to/remote-test-server.keytab, debug=true)
/core-service=management/security-realm=Kerberos/authentication=kerberos:add(remove-realm=true)

예: Kerberos Remoting Security Cryostat 구성

<management>
  <security-realms>
    ...
    <security-realm name="Kerberos">
      <server-identities>
        <kerberos>
          <keytab principal="remote/test-server.elytron.org@ELYTRON.ORG" path="path/to/remote-test-server.keytab" debug="true"/>
        </kerberos>
      </server-identities>
      <authentication>
        <kerberos remove-realm="true"/>
      </authentication>
    </security-realm>
  </security-realms>
  ...
</management>

9.3.6.2.1. Kerberos Remoting SASL 인증을 Elytron으로 마이그레이션

다음 단계를 사용하여 Kerberos 원격 SASL 인증을 Elytron으로 마이그레이션합니다.

프로세스

  1. ID 정보를 로드하는 데 사용할 보안 영역을 정의합니다.

    /path=kerberos:add(relative-to=user.home, path=src/kerberos)
    /subsystem=elytron/properties-realm=kerberos-properties:add(users-properties={path=kerberos-users.properties, relative-to=kerberos, digest-realm-name=ELYTRON.ORG}, groups-properties={path=kerberos-groups.properties, relative-to=kerberos})
  2. 서버 ID에 대한 Kerberos 보안 팩토리를 정의합니다.

    /subsystem=elytron/kerberos-security-factory=test-server:add(relative-to=kerberos, path=remote-test-server.keytab, principal=remote/test-server.elytron.org@ELYTRON.ORG)
  3. 보안 도메인 및 SASL 인증 팩토리를 정의합니다.

    /subsystem=elytron/security-domain=KerberosDomain:add(default-realm=kerberos-properties, realms=[{realm=kerberos-properties, role-decoder=groups-to-roles}], permission-mapper=default-permission-mapper)
    /subsystem=elytron/sasl-authentication-factory=gssapi-authentication-factory:add(security-domain=KerberosDomain, sasl-server-factory=elytron, mechanism-configurations=[{mechanism-name=GSSAPI, credential-security-factory=test-server}])

그러면 서버 구성 파일의 elytron 하위 시스템에 다음 구성이 생성됩니다.

<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
  ...
  <security-domains>
    ...
    <security-domain name="KerberosDomain" default-realm="kerberos-properties" permission-mapper="default-permission-mapper">
      <realm name="kerberos-properties" role-decoder="groups-to-roles"/>
    </security-domain>
  </security-domains>
  <security-realms>
   ...
     <properties-realm name="kerberos-properties">
       <users-properties path="kerberos-users.properties" relative-to="kerberos" digest-realm-name="ELYTRON.ORG"/>
       <groups-properties path="kerberos-groups.properties" relative-to="kerberos"/>
     </properties-realm>
   </security-realms>
   <credential-security-factories>
     <kerberos-security-factory name="test-server" principal="remote/test-server.elytron.org@ELYTRON.ORG" path="remote-test-server.keytab" relative-to="kerberos"/>
   </credential-security-factories>
   ...
   <sasl>
     ...
     <sasl-authentication-factory name="gssapi-authentication-factory" sasl-server-factory="elytron" security-domain="KerberosDomain">
       <mechanism-configuration>
         <mechanism mechanism-name="GSSAPI" credential-security-factory="test-server"/>
       </mechanism-configuration>
     </sasl-authentication-factory>
     ...
   </sasl>
 </subsystem>

검증

이제 SASL 인증 팩토리를 참조하도록 관리 인터페이스 또는 리모팅 커넥터를 업데이트할 수 있습니다.

여기에 정의된 두 Elytron 예제를 결합하여 공유 보안 도메인 및 보안 영역을 사용하고 각각 고유한 Kerberos 보안 팩토리를 참조하는 프로토콜별 인증 팩토리를 사용할 수도 있습니다.

9.3.7. Elytron으로 Composite Stores 마이그레이션

이 섹션에서는 여러 ID 저장소를 사용하는 Elytron Aggregate Security Cryostat Configuration 을 사용하는 Cryostatet Box 또는 레거시 보안 영역 구성을 마이그레이션하는 방법을 설명합니다.

CryostatetBox 또는 레거시 보안 영역을 사용하는 경우, 권한 부여에 사용되는 정보가 다른 저장소에서 로드되는 동안 하나의 ID 저장소에 대해 인증이 수행되는 구성을 정의할 수 있습니다. Elytron으로 마이그레이션할 때 집계 보안 영역을 사용하여 이 작업을 수행할 수 있습니다.

다음 예제에서는 example-users.properties 속성 파일을 사용하여 사용자 인증을 수행한 다음 LDAP를 쿼리하여 그룹 및 역할 정보를 로드합니다.

참고

표시된 구성은 추가 배경 정보를 제공하는 다음 섹션의 예제를 기반으로 합니다.

9.3.7.1. Cryostatetbox Composite Store 구성

이 시나리오의 CryostatetBox 보안 도메인은 다음 관리 CLI 명령을 사용하여 구성됩니다.

예: CryostatetBox 구성 명령

/subsystem=security/security-domain=application-security:add

/subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[ {code=UsersRoles, flag=Required, module-options={ password-stacking=useFirstPass, usersProperties=file://${jboss.server.config.dir}/example-users.properties}} {code=LdapExtended, flag=Required, module-options={ password-stacking=useFirstPass, java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url=ldap://localhost:10389, java.naming.security.authentication=simple, bindDN="uid=admin,ou=system", bindCredential=secret, baseCtxDN="ou=users,dc=group-to-principal,dc=wildfly,dc=org", baseFilter="(uid={0})", rolesCtxDN="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",roleFilter="(uniqueMember={1})", roleAttributeID="uid" }}])

그러면 다음 서버 구성이 생성됩니다.

예: CryostatetBox Security Domain Configuration

<security-domain name="application-security">
  <authentication>
    <login-module code="UsersRoles" flag="required">
      <module-option name="password-stacking" value="useFirstPass"/>
      <module-option name="usersProperties" value="file://${jboss.server.config.dir}/example-users.properties"/>
    </login-module>
    <login-module code="LdapExtended" flag="required">
      <module-option name="password-stacking" value="useFirstPass"/>
      <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
      <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/>
      <module-option name="java.naming.security.authentication" value="simple"/>
      <module-option name="bindDN" value="uid=admin,ou=system"/>
      <module-option name="bindCredential" value="secret"/>
      <module-option name="baseCtxDN" value="ou=users,dc=group-to-principal,dc=wildfly,dc=org"/>
      <module-option name="baseFilter" value="(uid={0})"/>
      <module-option name="rolesCtxDN" value="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
      <module-option name="roleFilter" value="(uniqueMember={1})"/>
      <module-option name="roleAttributeID" value="uid"/>
    </login-module>
  </authentication>
</security-domain>

자세한 내용은 집계 보안 영역을 구성하는 방법에 대한 Elytron Aggregate Security Cryostat Configuration 을 참조하십시오.

9.3.7.2. 레거시 보안 Composite Store 구성

JBoss EAP 7.4 및 이전 리클레의 경우 다음 관리 CLI 명령을 사용하여 기존 보안 영역 구성이 구성됩니다.

참고

레거시 보안 명령은 JBoss EAP 8에서 적용되지 않으므로 이러한 명령은 JBoss EAP 7.4 및 이전 릴리스에만 적용됩니다.

예: 레거시 보안 Cryostat 구성 명령

/core-service=management/ldap-connection=MyLdapConnection:add(url="ldap://localhost:10389", search-dn="uid=admin,ou=system", search-credential="secret")

/core-service=management/security-realm=ApplicationSecurity:add
/core-service=management/security-realm=ApplicationSecurity/authentication=properties:add(path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true)

batch
/core-service=management/security-realm=ApplicationSecurity/authorization=ldap:add(connection=MyLdapConnection)
/core-service=management/security-realm=ApplicationSecurity/authorization=ldap/username-to-dn=username-filter:add(attribute=uid, base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org")
/core-service=management/security-realm=ApplicationSecurity/authorization=ldap/group-search=group-to-principal:add(base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org", iterative=true, prefer-original-connection=true, principal-attribute=uniqueMember, search-by=DISTINGUISHED_NAME, group-name=SIMPLE, group-name-attribute=uid)
run-batch

그러면 다음 서버 구성이 생성됩니다.

예: 레거시 보안 설정

<security-realms>
  ...
  <security-realm name="ApplicationSecurity">
    <authentication>
      <properties path="example-users.properties" relative-to="jboss.server.config.dir" plain-text="true"/>
    </authentication>
    <authorization>
      <ldap connection="MyLdapConnection">
        <username-to-dn>
          <username-filter base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org" attribute="uid"/>
        </username-to-dn>
        <group-search group-name="SIMPLE" iterative="true" group-name-attribute="uid">
          <group-to-principal search-by="DISTINGUISHED_NAME" base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org" prefer-original-connection="true">
            <membership-filter principal-attribute="uniqueMember"/>
          </group-to-principal>
        </group-search>
      </ldap>
    </authorization>
  </security-realm>
</security-realms>
<outbound-connections>
  <ldap name="MyLdapConnection" url="ldap://localhost:10389" search-dn="uid=admin,ou=system" search-credential="secret"/>
</outbound-connections>

이 작업을 수행하기 위해 ely tron 하위 시스템에서 집계 보안 영역을 구성하는 방법은 Elytron Aggregate Security Cryostat Configuration 에서 참조하십시오.

9.3.7.3. Elytron Aggregate Security Cryostat

이 시나리오에 동일한 Elytron 구성은 다음 관리 CLI 명령을 사용하여 구성됩니다.

예: Elytron 구성 명령

/subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin,ou=system", credential-reference={clear-text=secret})

/subsystem=elytron/ldap-realm=ldap-realm:add(dir-context=ldap-connection, direct-verification=true, identity-mapping={search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org", rdn-identifier="uid", attribute-mapping=[{filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",filter="(uniqueMember={1})",from="uid",to="Roles"}]})

/subsystem=elytron/properties-realm=application-properties:add(users-properties={path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true, digest-realm-name="Application Security"})

/subsystem=elytron/aggregate-realm=combined-realm:add(authentication-realm=application-properties, authorization-realm=ldap-realm)

/subsystem=elytron/security-domain=application-security:add(realms=[{realm=combined-realm}], default-realm=combined-realm, permission-mapper=default-permission-mapper)
/subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=BASIC}])

그러면 다음 서버 구성이 생성됩니다.

예: Elytron Configuration

<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
  ...
  <security-domains>
    ...
    <security-domain name="application-security" default-realm="combined-realm" permission-mapper="default-permission-mapper">
      <realm name="combined-realm"/>
    </security-domain>
  </security-domains>
  <security-realms>
    <aggregate-realm name="combined-realm" authentication-realm="application-properties" authorization-realm="ldap-realm"/>
      ...
      <properties-realm name="application-properties">
        <users-properties path="example-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="Application Security" plain-text="true"/>
      </properties-realm>
      <ldap-realm name="ldap-realm" dir-context="ldap-connection" direct-verification="true">
        <identity-mapping rdn-identifier="uid" search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org">
          <attribute-mapping>
            <attribute from="uid" to="Roles" filter="(uniqueMember={1})" filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
          </attribute-mapping>
        </identity-mapping>
      </ldap-realm>
  </security-realms>
  ...
  <http>
    ...
    <http-authentication-factory name="application-security-http" http-server-mechanism-factory="global" security-domain="application-security">
      <mechanism-configuration>
        <mechanism mechanism-name="BASIC"/>
      </mechanism-configuration>
    </http-authentication-factory>
    ...
  </http>
  ...
  <dir-contexts>
    <dir-context name="ldap-connection" url="ldap://localhost:10389" principal="uid=admin,ou=system">
      <credential-reference clear-text="secret"/>
    </dir-context>
  </dir-contexts>
</subsystem>

elytron 하위 시스템에서 인증에 사용할 보안 영역과 권한 부여 결정에 사용할 보안 영역을 지정하는 집계-realm 이 정의되어 있습니다.

9.3.8. 캐싱을 사용하는 보안 도메인을 Elytron으로 마이그레이션

CryostatetBox를 사용하는 경우 보안 도메인을 정의하고 액세스를 위해 메모리 내 캐싱을 활성화할 수 있었습니다. 이를 통해 메모리의 ID 데이터에 액세스하고 ID 저장소에 대한 추가 직접 액세스를 방지할 수 있었습니다. Elytron을 사용하여 유사한 구성을 수행할 수 있습니다. 이 섹션에서는 Elytron을 사용할 때 CryostatetBox 구성 및 동등한 보안 도메인 캐싱 구성 예를 보여줍니다.

9.3.8.1. Cryostatetbox 캐시된 보안 도메인 구성

다음 명령은 JBoss EAP 7.4 및 이전 버전에서 캐싱을 활성화하는 데 필요한 보안 도메인 구성을 보여줍니다.

예: CryostatetBox Cached Security Domain Commands

/subsystem=security/security-domain=application-security:add(cache-type=default)
/subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=LdapExtended, flag=Required, module-options={ java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url=ldap://localhost:10389, java.naming.security.authentication=simple, bindDN="uid=admin,ou=system", bindCredential=secret, baseCtxDN="ou=users,dc=group-to-principal,dc=wildfly,dc=org", baseFilter="(uid={0})", rolesCtxDN="ou=groups,dc=group-to-principal,dc=wildfly,dc=org", roleFilter="(uniqueMember={1})", roleAttributeID="uid" }}])

그러면 다음 서버 구성이 생성됩니다.

예: CryostatetBox Cached Security Domain Configuration

<subsystem xmlns="urn:jboss:domain:security:2.0">
  <security-domains>
    ...
    <security-domain name="application-security" cache-type="default">
      <authentication>
        <login-module code="LdapExtended" flag="required">
          <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
          <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/>
          <module-option name="java.naming.security.authentication" value="simple"/>
          <module-option name="bindDN" value="uid=admin,ou=system"/>
          <module-option name="bindCredential" value="secret"/>
          <module-option name="baseCtxDN" value="ou=users,dc=group-to-principal,dc=wildfly,dc=org"/>
          <module-option name="baseFilter" value="(uid={0})"/>
          <module-option name="rolesCtxDN" value="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
          <module-option name="roleFilter" value="(uniqueMember={1})"/>
          <module-option name="roleAttributeID" value="uid"/>
        </login-module>
      </authentication>
    </security-domain>
  </security-domains>
</subsystem>

참고

이 명령과 결과 구성은 Elytron으로 마이그레이션 LDAP 인증 구성에 표시된 예제와 유사하지만 여기에서 속성 cache-type기본값 으로 정의됩니다. 기본 캐시 유형은 메모리 내 캐시입니다. CryostatetBox를 사용하는 경우 infinispan캐시 유형을 지정할 수도 있지만 이 유형은 Elytron에서는 지원되지 않습니다.

9.3.8.2. Elytron 캐시된 보안 도메인 구성

다음 단계에 따라 Elytron을 사용할 때 보안 도메인을 캐시하는 유사한 구성을 생성합니다.

프로세스

  1. 보안 영역을 정의하고 보안 영역을 캐싱 영역에서 래핑합니다. 그런 다음 캐싱 영역을 보안 도메인 및 나중에 인증 팩토리에서 사용할 수 있습니다.

    예: Elytron Security Cryostat 구성 명령

    /subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin,ou=system", credential-reference={clear-text=secret})
    /subsystem=elytron/ldap-realm=ldap-realm:add(dir-context=ldap-connection, direct-verification=true, identity-mapping={search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org", rdn-identifier="uid", attribute-mapping=[{filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",filter="(uniqueMember={1})",from="uid",to="Roles"}]})
    /subsystem=elytron/caching-realm=cached-ldap:add(realm=ldap-realm)

  2. 이전 단계에서 정의한 cached-ldap 영역을 사용하는 보안 도메인 및 HTTP 인증 팩토리를 정의합니다.

    예: Elytron Security Domain and Authentication factory 구성 명령

    /subsystem=elytron/security-domain=application-security:add(realms=[{realm=cached-ldap}], default-realm=cached-ldap, permission-mapper=default-permission-mapper)
    /subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=BASIC}])

    참고

    원래 영역이 아닌 caching-realm 을 참조해야 합니다. 그렇지 않으면 캐싱이 무시됩니다.

이러한 명령을 실행하면 서버 구성에 다음이 추가됩니다.

예: Elytron Cached Security Domain Configuration

<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
  ...
  <security-domains>
    ...
    <security-domain name="application-security" default-realm="cached-ldap" permission-mapper="default-permission-mapper">
      <realm name="cached-ldap"/>
    </security-domain>
  </security-domains>
  ...
  <security-realms>
    ....
  <ldap-realm name="ldap-realm" dir-context="ldap-connection" direct-verification="true">
      <identity-mapping rdn-identifier="uid" search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org">
        <attribute-mapping>
          <attribute from="uid" to="Roles" filter="(uniqueMember={1})" filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/>
        </attribute-mapping>
      </identity-mapping>
    </ldap-realm>
    <caching-realm name="cached-ldap" realm="ldap-realm"/>
  </security-realms>
  ...
  <http>
    ...
    <http-authentication-factory name="application-security-http" http-server-mechanism-factory="global" security-domain="application-security">
      <mechanism-configuration>
        <mechanism mechanism-name="BASIC"/>
      </mechanism-configuration>
    </http-authentication-factory>
    ...
  </http>
   ...
  <dir-contexts>
    <dir-context name="ldap-connection" url="ldap://localhost:10389" principal="uid=admin,ou=system">
      <credential-reference clear-text="secret"/>
    </dir-context>
  </dir-contexts>
  ...

9.3.9. Jakarta 권한 부여 보안을 Elytron으로 마이그레이션

기본적으로 JBoss EAP 7.4 및 이전 버전은 레거시 보안 하위 시스템을 사용하여 Jakarta 인증 정책 공급자 및 팩토리를 구성합니다. 기본 구성은 CryostatetBox의 구현에 매핑됩니다.

elytron 하위 시스템은 JACC(Java Authorization Contract for Containers) 사양을 기반으로 기본 제공 정책 공급자를 제공합니다.

elytron 하위 시스템에서 Java Authorization Contract for Containers 정책 공급자를 활성화하고 정의하는 방법에 대한 자세한 내용은 JBoss EAP 7.4 개발 가이드에서 Jakarta 인증 정책 공급자 정의를 참조하십시오.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동