저희가 jsp, servlet으로 인증 처리를 하려고 하는데요
ldap 안에 password를 가져와서 값을 비교 하려고 하는데
이 부분에서 password가 암호화 되 있던데
이거 어떻게 처리 해야 되나요???
혹시 이거에 관한 자료 갖고 있으면 답변 부탁드립니다.
암호는 해슁과 인코딩을 거쳐 저장되기 때문에 값을 가져와 비교하면 안됩니다.
ㅓjava API 내에 compare 혹은 authenticate를 이용하십시요.
jack님 답변 고맙습니다
근데 java api에 compare 또는 authenticate라는거 없던데요...
jdk 1.4 api에 있는건가요??
혹시 인증 관련해서 자바로 구현한거 있으면 리플 달아 주세욥~
음... Sun ONE Directory SDK for Java 4.1 (http://wwws.sun.com/software/download/app_dev.html#sdks)
또는 JNDI를 참조하시면 됩니다.
다음은 Sun ONE Directory SDK for Java 4.1 를 기준으로 작성한 예제입니다.
제품에 따라 userpassword 가 compare 되는경우가있고 되지않는 경우가 있군요
Syntegra의 Aphelion 은 검증되는데 Sun의 iplanet은 안되는군요..
import netscape.ldap.*;
import java.util.*;
import java.io.*;
public class Compare {
public static void main( String[] args )throws Exception
{
String line=null;
LDAPConnection ld = null;
int len = 0;
int num=0;
int num2=0;
int k=0;
String ENTRYDN = "ou=testuser, o=netmarble.net";
String MGR_DN = "cn=directory manager";
String MGR_PW = "dirmanager";
String MY_HOST = "192.168.1.150";
int MY_PORT = 489;
try {
ld = new LDAPConnection();
/* Connect to server */
ld.connect( MY_HOST, MY_PORT );
/* Authenticate to the server as directory manager */
ld.authenticate( MGR_DN, MGR_PW );
/* compare the value against the userpassword attribute */
LDAPAttribute attr = new LDAPAttribute( "userpassword","1234");
boolean ok = ld.compare( ENTRYDN, attr );
System.out.println( "Compare Result : " +ok );
}
catch( LDAPException e ) {
// e.printStackTrace();
if ( e.getLDAPResultCode() == 32 ){
System.out.println(ENTRYDN+" :사용자 없음 \n");
else if ( e.getLDAPResultCode() == 5 ){
System.out.println( "Error: 암호틀림" );
else if ( e.getLDAPResultCode() == 49 ){
System.out.println( "Error: 관리자 BInd 못함" );
else {
System.out.println(ENTRYDN+" : 확인 않됨\n");
if ( (ld != null) && ld.isConnected() ) {
ld.disconnect();
} catch ( LDAPException e ) {
e.printStackTrace();
System.exit(-1);