Posts tagged ‘WebLogic’

weblogic session persistence 설정하기

웹로직에서 웹애플리케이션을 개발하고 배포를 하는 과정에서 재배포 혹은 서버 점검에 따라 인스턴스를 재기동할 경우 사용자 세션이 끊기는 현상이 발생합니다.

이에 대하여 웹로직 배치 기술자 조정을 통해 세션을 유지하는 방법을 찾아보고 글 남깁니다.

보통 세션 퍼시스턴스의 설정은 클러스터 환경에서 서로 다른 서버간 세션 공유에 활용되는 것이 많으리라 생각됩니다.

아래 설정은 단일 서버에서 파일에 세션 상태를 기록하여 세션을 유지하는 예제입니다.

<?xml version='1.0' encoding='UTF-8'?>
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <session-descriptor>
    <persistent-store-type>file</persistent-store-type>
  </session-descriptor>

</weblogic-web-app>

세션에 사용자 정의 클래스를 넣을 경우, 해당 클래스를 serializable을 구현하도록 해야 합니다. 그렇지 않을 경우, 세션은 유지되나 해당 세션 애트리뷰트를 참조할 수 없습니다.

그리고 해당 출처는 아래와 같습니다.

http://download.oracle.com/docs/cd/E13222_01/wls/docs81/webapp/sessions.html
위 문서에 설명이 나오며, weblogic.xml 파일 실제 구조는 아래 URL에서 참조하였습니다.

http://cheese.springnote.com/pages/4542851

웹로직의 보편적인 웹개발상의 디버그

웹로직을 사용하면서, 에러의 원인을 쉽게 찾을 수 없을 때, 원인을 추적하는 방법을 나열해 봅니다.

dispatcher forward 사용시 해당 리소스가 없을 경우 추적하기.( 알 수 없는 404 에러 )

웹개발 프레임워크를 사용할 때 주로 개발하는 형태가, controller를 작성하여 비즈니스 로직을 수행한 후, 사용자에게 보여질 페이지(JSP)로 RequestDispatcher.forward 하는 형태이리라 생각됩니다. ( 물론 다른 형태도 많겠지만, RequestDispatcher.forward 하는 형태를 가정한 상황으로 글을 씁니다. )

아래는 그렇게 사용한 java servlet 예제입니다.

RequestDispatcher rd = null;
rd = request.getRequestDispatcher("/main.jsp");
rd.forward(request, response);

이 경우 만약 main.jsp 파일이 존재하지 않는다면, 웹로직은 404 에러 페이지만 출력할 뿐입니다. 그러면 사용자는 호출한 URL이 존재하지 않는 것인지 forward 대상 페이지가 없는 것인지 알 수 없습니다.

tomcat 이나 다른 WAS의 경우는 주로 위 처리에 대한 에러가 로그파일 혹은 웹브라우저에 추적이 가능한 정보를 제공하는데, 웹로직은 404 에러코드만 줄 뿐 추가정보를 제공하지 않았습니다. ( 제 경험 )

이에 추적정보를 찾는 방법을 알았기에 공유합니다.

  1. 해당 서버를 선택합니다.
  2. 디버그 탭을 선택합니다.
  3. weblogic 항목을 펼칩니다.
  4. servlet 항목을 펼칩니다.
  5. DebugURLResolution 항목에 체크표합니다.
  6. 사용 버튼을 눌러 활성화 합니다.

위 과정을 거치면 아래와 같은 로그를 발견할 수 있습니다. 서버의 logs/서버명.log 파일에 기록됩니다.

####<2011. 6. 17 오후 4시 41분 10초 KST> <Debug> <URLResolution> <whity> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1308296470912> <BEA-000000> <ServletContext@465470[app:test module:test path:/test spec-version:null]: resolving request with relUri: /main.jsp>
####<2011. 6. 17 오후 4시 41분 10초 KST> <Debug> <URLResolution> <whity> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1308296470912> <BEA-000000> <ServletContext@465470[app:test module:test path:/test spec-version:null]: getResourceAsSource() couldn't find source for : /main.jsp>

위 로그 마지막 줄을 통해서 main.jsp 파일을 찾을 수 없다는 내용을 확인할 수 있습니다.

JDeveloper + WebLogic 환경에서 Remote Debugging 사용하기.

JDeveloper와 WebLogic을 사용하는 개발환경에서 Integrated Server를 쓰지 않고, 테스트 혹은 운용서버에 배포후 Remote Debugging을 하는 방법을 간략히 소개합니다.

1. 대상 서버의 Remote Debugging JVM 옵션 세팅.

먼저 JVM에서 Remote Debugging을 받아들이기 위한 설정을 추가합니다.
아래 세팅을 서버의 구동 스크립트에 포함되도록 합니다.
( 저는 편의상 개발서버의 .profile을 사용하고 있습니다. nodemanager 등을 사용중인 경우에는 콘솔에서 세팅 가능하겠습니다. )

# JDK 1.4 이하 기본 형태
# -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=[port]
# JDK 1.5 이상 기본 형태
# -agentlib:jdwp=transport=dt_socket,server=y,address=[port]
JAVA_OPTIONS=$JAVA_OPTIONS\
"-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n"

2. 대상 서버의 Tunneling 설정.

weblogic 콘솔에서 대상 서버의 Protocols탭에 Enable Tunneling.을 체크합니다.

3. JDeveloper에서 대상 프로젝트에 Remote Debugging 설정.

개발중인 프로젝트에 Remote Debugging을 세팅하는 과정입니다.

  1. ‘Project Properties’에서 ‘Run/Debug/Profile’ 선택.
  2. ‘Run Configurations’에서 복제 혹은 기존 것을 편집.
  3. ‘Launch Settings’에서 ‘Remote Debugging’ 체크.
  4. ‘Tool Settings’ – ‘Debugger’ – ‘Remote’에 아래 설정 추가.
    • Protocol : Attach to JPDA
    • Host : 해당서버 주소
    • Port : 4000 1항에서 설정.

4. Remote Debugging 시작.

프로젝트에서 ‘Start Remote Debugger’를 선택하면, 브레이크포인트 등 원하는 디버깅을 수행할 수 있습니다.

weblogic nodemanager 명령 요약

weblogic nodemanager 에 접속하여 명령을 하는 것에 대한 간단한 요약.

telnet 접속의 경우.

telnet wls.dgkim.net 5555
DOMAIN #도메인명#
USER weblogic
PASS #패스워드#
SERVER #서버#
KILL # 종료시.
START # 시작시.

ssl 접속의 경우.

openssl s_client -connect wls.dgkim.net:5556
DOMAIN #도메인명#
USER weblogic
PASS #패스워드#
SERVER #서버#
KILL # 종료시.
START # 시작시.

WLST로 DataSource 생성하기.

이번에 웹로직으로 웹프로젝트를 하면서, JDBC 정보를 프로그램에 녹여볼 생각을 했습니다.

예전에 Oracle WAS의 경우 Oracle WAS Deployment Descriptor중 data-sources.xml을 활용하여 애플리케이션 배포에 JDBC정보를 넣어 배포를 했었는데, 웹로직은 약간 달랐습니다.( 그리고 웹로직의 버저닝을 사용하니 뭔가 좀 더 달라지는 듯 했습니다. )

그래서, 애플리케이션 소스에는 넣지 못하더라도, 배포 가능한 소스로 해보고자 방법을 찾던 중 WLST를 사용하는 방법의 예제를 찾았습니다.

그래서 그 방법으로 하기로 하고 아래와 같은 스크립트로 한번에 DataSource를 생성하였습니다.

import sys
from java.lang import System

# function definition BEGIN

# defining addJDBC function
def addJDBC(obj, servers):
    print("")
    print("*** Creating JDBC  ")
    
    # Create the Connection Pool.  The system resource will have
    # generated name of 'PoolName'+"-jdbc"
    
    myResourceName = obj["PoolName"]
    print("Here is the Resource Name: " + myResourceName)
    
    jdbcSystemResource = create(myResourceName,"JDBCSystemResource")
    myFile = jdbcSystemResource.getDescriptorFileName()
    print ("HERE IS THE JDBC FILE NAME: " + myFile)
    
    jdbcResource = jdbcSystemResource.getJDBCResource()
    jdbcResource.setName(obj["PoolName"])
    
    # Create the DataSource Params
    dpBean = jdbcResource.getJDBCDataSourceParams()
    myName=obj["JNDIName"]
    dpBean.setJNDINames([myName])
    
    # Create the Driver Params
    drBean = jdbcResource.getJDBCDriverParams()
    drBean.setPassword(obj["Password"])
    drBean.setUrl(obj["URLName"])
    drBean.setDriverName(obj["DriverName"])
    
    propBean = drBean.getProperties()
    driverProps = Properties()
    driverProps.setProperty("user",obj["UserName"])
    
    e = driverProps.propertyNames()
    while e.hasMoreElements() :
        propName = e.nextElement()
        myBean = propBean.createProperty(propName)
        myBean.setValue(driverProps.getProperty(propName))
        print myBean
        
        # Create the ConnectionPool Params
        ppBean = jdbcResource.getJDBCConnectionPoolParams()
        
        ppBean.setInitialCapacity(int(obj["InitialCapacity"]))
        ppBean.setMaxCapacity(int(obj["MaxCapacity"]))
        ppBean.setCapacityIncrement(int(obj["CapacityIncrement"]))
        
        if not obj["ShrinkPeriodMinutes"] == None:
            ppBean.setShrinkFrequencySeconds(int(obj["ShrinkPeriodMinutes"]))
        if not obj["TestTableName"] == None:
            ppBean.setTestConnectionsOnReserve(1)
            ppBean.setTestTableName(obj["TestTableName"])
        if not obj["LoginDelaySeconds"] == None:
            ppBean.setLoginDelaySeconds(int(obj["LoginDelaySeconds"]))

        # Adding KeepXaConnTillTxComplete to help with in-doubt transactions.
        xaParams = jdbcResource.getJDBCXAParams()
        xaParams.setKeepXaConnTillTxComplete(1)

        # Add Target
        
        for servername in servers:
            jdbcSystemResource.addTarget(getMBean("/Servers/" + servername))

# function definition END


print "@@@ Starting the script ..."


url = 't3://localhost:7001'
usr = 'weblogic'
password = 'welcome'
servernames = ['AdminServer', 'SSO1', 'SSO2']

connect(usr,password, url)

for servername in servernames:
    servermb=getMBean("Servers/" + servername)
    if servermb is None:
       print '@@@ No server MBean found'
       exit()

edit()
startEdit()

DB1 = {
    'PoolName' : 'DataSource for DGKIM',
    'JNDIName' : 'jdbc/dgkim',
    'Password' : 'password',
    'URLName' : 'jdbc:oracle:thin:@db.dgkim.net:1521:DGKIM',
    'DriverName' : 'oracle.jdbc.OracleDriver',
    'UserName' : 'dgkim',
    'InitialCapacity' : '20',
    'MaxCapacity' : '100',
    'CapacityIncrement' : '10',
    'ShrinkPeriodMinutes' : None,
    'TestTableName' : 'DUAL',
    'LoginDelaySeconds' : None
}

addJDBC(DB1, servernames)

save()
activate(block="true")

exit()

저는 프로젝트 특성상 하나의 DB가 아닌 여러개의 DB를 사용하게 됩니다. 위 예제에서는 DB1이란 것을 사용했지만, 실제로는 8개의 DB에 접속하는 프로그램을 작성했습니다.

그래서 위 코드를 만들고, 개발 서버냐 운용 서버냐에 따라 url과 servernames를 수정하여 한번에 데이터 소스를 작성해서 편리했습니다.

LDAP 을 사용하여 계정관리 통합하기

Directory Server를 구축하여, 여러 가지 애플리케이션의 인증 관리를 통합할 수 있습니다.

저는 uid={id},ou=Users,dc=dgkim,dc=net 이란 이름의 인증 디렉토리를 구축하여 사용할 수 있습니다.

그리고, 아래와 같은 로그인에 LDAP의 ID, Password를 활용하고 있습니다.

웹애플리케이션 인증

JAAS를 활용하여 인증에 LDAP을 사용하고 있습니다.

서블릿 웹 모듈에서 JAAS 활용하기

아래 web.xml 설정을 통해서 웹모듈에서 컨테이너가 제공하는 UserPrincipal 과 Role 정보를 활용할 수 있습니다.

web.xml : admin, user 롤을 정의하고, user 롤에 속하는 사용자가 사용할 수 있도록 구성.

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">
    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login_form.jsp</form-login-page>
            <form-error-page>/login_error.jsp</form-error-page>
        </form-login-config>
    </login-config>
    <security-role>
        <role-name>Admin</role-name>
    </security-role>
    <security-role>
        <role-name>User</role-name>
    </security-role>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>test web application</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>User</role-name>
        </auth-constraint>
    </security-constraint>
</web-app>

그리고, request.getUserPrincipal() 을 호출하면, 로그인에 사용한 ID를 추출할 수 있으며, request.isUserInRole(“User”) 형태로 사용자가 특정 롤을 가지는지 확인할 수 있습니다.

OC4J 10.1.3에서 JAAS 서비스를 제공하는 구성

OC4J에서 컨테이너의 보안 제공자와 서블릿간의 연동을 위한 정보를 구성합니다.

컨테이너 보안 제공자에서 제공하는 사용자, 그룹 정보를 서블릿의 UserPrincipal, Role 정보와 매핑해 줍니다.

<?xml version="1.0"?>

<orion-application  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-application-10_0.xsd"  deployment-version="10.1.3.3.0" default-data-source="jdbc/OracleDS" component-classification="external"
  schema-major-version="10" schema-minor-version="0" >
        <web-module id="certmanager" path="certmanager.war" />
        <persistence path="persistence" />
        <jazn provider="XML" >
                <property name="custom.ldap.provider" value="true" />
        </jazn>
        <jazn-loginconfig>
                <application>
                        <name>bisu</name>
                        <login-modules>
                                <login-module>
                                        <class>oracle.security.jazn.login.module.LDAPLoginModule</class>
                                        <control-flag>required</control-flag>
                                        <options>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.user.object.class</name>
                                                        <value>inetOrgPerson</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.provider.connect.pool</name>
                                                        <value>true</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.provider.type</name>
                                                        <value>Other</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.provider.credential</name>
							<value>{password}</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.provider.url</name>
                                                        <value>ldap://localhost:389</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.role.searchscope</name>
                                                        <value>onelevel</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.user.searchscope</name>
                                                        <value>onelevel</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.role.searchbase</name>
                                                        <value>ou=Groups,dc=dgkim,dc=net</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.user.searchbase</name>
                                                        <value>ou=Users,dc=dgkim,dc=net</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.role.object.class</name>
                                                        <value>groupOfUniqueNames</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.role.name.attribute</name>
                                                        <value>cn</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.provider.user</name>
                                                        <value>uid=Administrator,ou=Users,dc=dgkim,dc=net</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.user.name.attribute</name>
                                                        <value>uid</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.membership.searchscope</name>
                                                        <value>direct</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.lm.cache_enabled</name>
                                                        <value>false</value>
                                                </option>
                                                <option>
                                                        <name>oracle.security.jaas.ldap.member.attribute</name>
                                                        <value>uniqueMember</value>
                                                </option>
                                        </options>
                                </login-module>
                        </login-modules>
                </application>
        </jazn-loginconfig>
        <log>
                <file path="application.log" />
        </log>
</orion-application>

웹로직 보안제공자를 사용한 LDAP인증

웹로직에서 도메인 단위 보안제공자에서 LDAP 인증을 활용하는 방법을 설명합니다.

웹로직 콘솔에서 LDAP 로그인 모듈 등록하기

  1. 보안영역 선택
  2. Realm 선택(기본 myrealm)
  3. 제공자 탭의 인증 탭 선택
  4. 새로만들기
  5. 이름을 주고, 유형을 LDAPAuthenticator 선택
  6. 생성한 제공자 선택
  7. 구성 탭의 제공자별 탭 선택
  8. LDAP 정보 등록 : 호스트, 포트, 사용자 기본 DN, 그룹 기본 DN
  9. 구성 탭의 공통 탭 선택
  10. 콘트롤 플래그를 SUFFICIENT 선택
  11. 제공자 탭의 인증 탭으로 이동
  12. 순서 재지정 선택
  13. 생성한 제공자를 최상위로 이동
  14. 도메인 내의 서버를 재시작

위 구성을 하면, LDAP 인증을 먼저 수행하고, weblogic의 내장 사용자를 검색하게 됩니다.

아래는 웹모듈에서 위에서 지정한 JAAS를 활용하는 것에 대한 구성파일입니다.

weblogic.xml : admin 롤에 대한 사용자 및 그룹을 Administrators로 지정. ( LDAP에 그룹이 Administrators인 경우 admin 롤을 가짐 )

<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"
                  xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
  <security-role-assignment>
    <role-name>Admin</role-name>
    <principal-name>Administrators</principal-name>
  </security-role-assignment>
</weblogic-web-app>

Tomcat 보안제공자를 사용한 LDAP인증

Tomcat에서 LDAP 인증을 활용하는 방법을 설명합니다.

Tomcat에서 server.xml 내부의 Engine설정 항목에 Realm 항목의 설정을 통해서 설정할 수 있습니다.
아래는 기본 설정의 내용입니다.

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>

위 구성은 기본적으로 제공되는 파일기반 보안 제공자를 사용하는 예입니다.

해당 보안제공자는 conf/tomcat-users.xml 파일에서 정의되어 있습니다.

아래 구성은 tomcat-users.xml과 추가로 LDAP 인증을 같이 사용하는 예제입니다.

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.CombinedRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
        <Realm className="org.apache.catalina.realm.JNDIRealm"
               connectionURL="ldap://localhost:389"
               userPattern="uid={0},ou=Users,dc=dgkim,dc=net"
               roleBase="ou=Groups,dc=dgkim,dc=net"
               roleName="cn"
               roleSearch="(uniqueMember={0})"/>
      </Realm>

위 구성을 하면, LDAP에 기록된 인증정보와 tomcat-users.xml에 정의된 인증정보를 사용할 수 있습니다.

아래는 웹모듈에서 위에서 지정한 JAAS를 활용하는 것에 대한 구성파일입니다.
( weblogic이나 oc4j와 달리 서블릿컨테이너 디플로이먼트 디스크립터를 사용하지 않고, 표준 디스크립터를 통해서 바로 사용가능합니다. )
/* 즉, 모든 리소스는 Users롤을 가진 사용자(ldap에서는 그룹)가 접근할 수 있도록 한 예입니다.


    
        BASIC
    
    
        Users
    
    
        
            allresources
            /*
        
        
            Users
        
    

TRAC 인증

Trac에 로그인 모듈은 Apache의 mod_auth_ldap을 사용하면 LDAP으로 로그인을 할 수 있습니다.

<Location /trac>
   SetHandler mod_python
   PythonInterpreter main_interpreter
   PythonHandler trac.web.modpython_frontend
   PythonOption TracEnvParentDir /TRAC
   PythonOption TracLocale ko_KR.utf8
   PythonOption TracUriRoot /trac

   AuthType Basic
   AuthName "LDAP Authentication Information"
   AuthBasicProvider "ldap"
   AuthLDAPURL "ldap://localhost:389/ou=Users,dc=dgkim,dc=net?uid?sub?(objectClass=*)"
   AuthzLDAPAuthoritative Off
   Require valid-user
</Location>

SVN 레포지토리 인증

Trac과 마찬가지로 mod_auth_ldap 모듈을 통해 LDAP 인증을 수행할 수 있습니다.

<Location /repository1>
    DAV svn
    SVNPath /repository1
    AuthType Basic
    AuthName "LDAP Authentication Information"
    AuthBasicProvider ldap
    AuthLDAPURL "ldap://localhost:389/ou=Users,dc=dgkim,dc=net?uid?sub?(objectClass=*)"
    AuthzLDAPAuthoritative Off
    Require valid-user
</Location>

MAIL 등 네트워크 서비스 인증

Cyrus IMAP 등 유닉스 기반의 네트워크 서비스들은 기본적으로 LDAP을 통한 인증이 가능하도록 준비되어 있습니다.
아래는 Cyrus IMAP에서 사용하는 SASL 인증용 설정 파일 내용입니다.

ldap_servers: ldap://127.0.0.1/
ldap_bind_dn: uid=Administrator, ou=Users, dc=dgkim, dc=net
ldap_bind_pw: {password}
ldap_default_domain: dgkim.net
ldap_search_base: ou=Users, dc=dgkim, dc=net
ldap_filter: (uid=%U)

Thunderbird에서 LDAP을 등록하면, 주소록 검색에도 활용할 수 있고, 만약 LDAP에 인증서가 등록되어 있다면, 보안메일 발송시에 Thunderbird가 자동으로 인증서를 검색해주는 특징도 활용할 수 있습니다.

OS 리눅스 인증

LDAP을 심지어 OS인증에도 사용할 수 있습니다.
Ubuntu linux에 LDAP 인증을 세팅해 본적이 있는데, 현재는 해당 시스템이 없어 설정을 소개할 수 없네요.

최근에 whity 마련과 함께 OS 인증을 테스트하였습니다.

ubuntu 에서 아래 명령으로 패키지 설치 만으로 어렵지 않게 세팅되었습니다. ( 단, 너무 간단하게 해버려서 상관관계는 잘 모르겠습니다. )

apt-get install libpam-ldapd

위 명령을 치면 libpam-ldapd 패키지와 함께 libnss-ldapd nscd nslcd 패키지가 추가로 설치됩니다.
설치후 기본적인 LDAP 정보만 알려주면 쉽게 사용할 수 있습니다. ( 심지어 search base도 일일이 지정할 필요가 없이, root dn만 주고 사용중입니다. )

그밖에…

LDAP 서버를 구축해 두면, 다양한 프로그램에서 인증에 활용할 수 있습니다. 본 블로그의 경우도 WordPress에 LDAP 플러그인을 설치하여, 로그인에 LDAP 서버를 통하고 있습니다.