database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
ㆍLDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
LDAP Q&A 3182 게시물 읽기
No. 3182
Java로 Active Directory를 이용한 AD 인증을 구현하려고 합니다...
작성자
java개발자
작성일
2011-09-11 14:36
조회수
9,120

 질문이 좀 많습니다

개념을 잘 모르는 관계로

이거저거 찾아봐도 조합이 잘 안됩니다

답변좀 부탁드립니다 ㅠㅠ

 

고객사에서 요청이 들어왔는데 정확히 어떻게 해야할지 잘 모르겠네요...

 

우선 요구사항은

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;

}

 

이 글에 대한 댓글이 총 4건 있습니다.

1. AD에도 DB 와 같이 Connection ID가 필요한가요?(LDAP 유저 ID, 패스 말고요)

예를 들면 DB에들어갈때 ID와 패스워드가 필요하듯이... 커넥션 ID 패스가 필요한지...

--> AD 계정 차체가 데이터이면서 Connection ID입니다.

2. OU 두개를 만들어 사용하라는 것 같네요.

3. AD에 사용자 Bind시에는 전체 DN 값으로 로그인하시면 됩니다.

 

광고: LDAP 전문회사 서진DSA : www.seojindsa.kr

송상준(sjsong)님이 2011-09-13 08:41에 작성한 댓글입니다.
이 댓글은 2011-09-14 07:48에 마지막으로 수정되었습니다.

 송상준님 답변 감사드립니다.

 

1번에 대한 답은 아주 명쾌하시군요

감사합니다...

그러면 따로 Connection ID가 필요 없다는거네요...

OU 두개를 만들어서 사용한다는게 무슨 의민지...

지금 Users는 만들어져 있고

그룹으로 ILK 라는거 하나 만들어봤거든요

그 안에 유저 하나 넣어봤고요...(속성에서)

그렇게 하면 되는건가요???

 

3번은 무슨 의민지 정확히좀 설명 부탁드립니다...

전체 DN 이라는게...

혹시 이런건가요?

OU=Users,OU=ILK,DC=xxx,DC=xxx

뭐 이런거...인지...

java개발자님이 2011-09-13 09:23에 작성한 댓글입니다.
이 댓글은 2011-09-13 09:24에 마지막으로 수정되었습니다. Edit

네 ou를 하나 더 만들어 거기에 사용자를  만들면 됩니다.

DN은 cn=userid,ou=ilk,dc=xxx,dc=xxx 맞습니다.

 

광고 : LDAP 전문회사 : www.seojindsa.kr  서진DSA 

송상준(sjsong)님이 2011-09-14 07:45에 작성한 댓글입니다.
이 댓글은 2011-09-14 07:48에 마지막으로 수정되었습니다.

답변 감사합니다.

Users 라는 ou는 빠지는게 맞는건가요???

그리고 CN은 유저 ID가 아니고 그냥 유저 이름 아닌가요???

제가 구현했을땐 sAMAccountName=userId 해서 찾았었는데요 ^^;;;

java개발자님이 2011-09-14 10:55에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3186AIX에서 ldap server / C# client 구현 [1]
디렉토리
2011-10-05
4770
3184LDAP 한글 관련 질문 드립니다. [3]
윤진하
2011-09-19
6208
3183LDAP 유저 인증 관련 좀 더 명확하게 다시 질문 드리겠습니다... [6]
java개발자
2011-09-14
6279
3182Java로 Active Directory를 이용한 AD 인증을 구현하려고 합니다... [4]
java개발자
2011-09-11
9120
3181LDAP ou 이동 관련.. [2]
한광식
2011-08-27
4758
3180LDAP LOG 파일 관리 [1]
Faust
2011-07-07
4816
3179LDAP 교육관련 공지 [1]
송상준
2011-06-21
5666
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다