질문이 좀 많습니다
개념을 잘 모르는 관계로
이거저거 찾아봐도 조합이 잘 안됩니다
답변좀 부탁드립니다 ㅠㅠ
고객사에서 요청이 들어왔는데 정확히 어떻게 해야할지 잘 모르겠네요...
우선 요구사항은
LDAP id, pass로 인증을 하게 해달라!
고객사에는 이미 LDAP 환경이 구축돼 있습니다만
가 아주 심플하게 요구사항인데요...
저희쪽 환경에는 고객사와 똑같이는 적용이 안 돼 있습니다...
그래서 질문은 아래와 같습니다.
1. AD에도 DB 와 같이 Connection ID가 필요한가요?(LDAP 유저 ID, 패스 말고요)
예를 들면 DB에들어갈때 ID와 패스워드가 필요하듯이... 커넥션 ID 패스가 필요한지...
2. OU라는게 있더라고요... 그래서 Active Directory를 실행시켜 봤더니
도메인에 xxx.net (임의 구성)
그 밑에 Users 라는게 있고...
그 밑에 유저들이 등록돼 있더군요
근데 고객사에는
OU=Users,OU=ILK
이렇게 두개를 사용해야 한다고 하더군요...
그러면 Users 밑에서 그룹을 하나 더 만들어서 ILK 란놈을 만들고 거기에 유저를 포함 시켜야 하는건지...
3. Java 코드로 할때는 어떤식으로 해야하는지 잘 모르겠습니다..
제가 대강 구현한것은 아래와 같습니다.
리소스 번들로 필요한 부분을 프로퍼티 파일에서 가져오는 것으로 구현돼 있습니다...
잘못돼 있는거 같은데 정확한 환경 구성이 돼 있는지도 잘 몰라서 어떻게 해야할지 감이 안옵니다...
저런거 신경 안 쓰고 그냥 Users 밑에 있을때는 잘 됐었는데 고객사가서 테스트 하니까 안되더라고요...
String url = "ldap://" + bundle.getString("ip");
String domain = bundle.getString("domain");
String searchBase = "DC=" + bundle.getString("dc1") + ",DC=" + bundle.getString("dc2");
String ou = "";
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, url);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, domain + "\\" + ntUserId);
env.put(Context.SECURITY_CREDENTIALS, ntPasswd);
try {
LdapContext ctx = new InitialLdapContext(env, null);
Attributes atrs = new BasicAttributes(true);
for( int i = 1; ou != null; i++) {
try {
ou = bundle.getString("ou" + i);
atrs.put("ou", ou);
ctx.bind("ou=" + ou, null, atrs);
}
catch(Exception e) {
ou = null;
}
}
SearchControls sc = new SearchControls();
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
sc.setReturningAttributes(new String[] { "cn", "mail" });
NamingEnumeration results = ctx.search(searchBase, "sAMAccountName=" + ntUserId, sc);
while (results.hasMoreElements()) {
SearchResult sr = (SearchResult) results.next();
Attributes attrs = sr.getAttributes();
if( attrs.toString().length() == 0 ) {
return false;
}
}
results.close();
} catch( Exception e ) {
e.printStackTrace();
return false;
}
|