JAAS (Java Authentication and Authorization) 문서를 읽은 후 JAAS를 사용하여 Java 응용 프로그램에 Kerberos 인증의 간단한 테스트 케이스를 구현하려고했습니다. 내 회사의 AD 서버에 대한 인증을 시도하고 있습니다. 승인되지 않은 액세스를 방지하기 위해 내 애플리케이션에서이를 사용하는 사용자의 사용자 이름을 승인하고 로그인하도록하고 싶습니다.내 JAAS 로그인 컨텍스트를 작성하는 데 내 프로그램이 실패하는 이유는 무엇입니까?
문서 here에 따라 아래 테스트 클래스를 만들었습니다. 이 테스트 클래스는 실행 중에 AuthTest의 복사본을 인스턴스화하는 실행 가능 JAR 내에 포함되어 있습니다 (따라서 생성자 코드가 시작됨). 나는 java -jar TheJar.jar -Djava.security.auth.login.config=auth.conf
으로 jar 파일을 실행 중이며 auth.conf
파일은 jar 파일과 동일한 디렉토리에있는 JAAS 로그인 구성 파일입니다.
등급 :
package main.java.***********.auth;
import com.sun.security.auth.callback.TextCallbackHandler;
import com.sun.security.auth.login.ConfigFile;
import java.net.URI;
import java.net.URISyntaxException;
import java.security.NoSuchAlgorithmException;
import javax.security.auth.login.*;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
/**
*
* @author
*/
public class AuthTest {
static final Logger logger = LogManager.getLogger();
Configuration.Parameters params = null;
ConfigFile ConfigObj;
TextCallbackHandler handler;
public AuthTest(){
//Try to create Login Context
LoginContext lc = null;
try{ //try #1
lc = new LoginContext("TheJar", handler);
logger.debug("LoginContext:" + lc.toString());
}
catch(LoginException le){
logger.error(le.getMessage());
logger.error(le.getCause());
}
//ENSURE Non-null context
if (lc == null){
logger.fatal("LOGIN CONTEXT WAS NULL. PROGRAM MUST DIE");
System.exit(-1);
}
//Try To Login
try{ //try #2
lc.login();
}
catch(LoginException le){
logger.error(le.getMessage());
logger.error(le.getCause());
logger.fatal("Authentication Failed. Shutting Down");
System.exit(-1);
}
}
}
auth.conf :
TheJar {
com.sun.security.auth.module.Krb5LoginModule required;
};
문제, 그러나, lc = new LoginContext("TheJar", handler);
실패하고 그리고 그 아래 catch 블록을 호출하는 것입니다. 자바를 처음 접했을 때, 이전에 어떤 종류의 인증 구성 요소 나 소프트웨어로도 작업 해 본 적이 없다면, 내가 뭘 잘못하고 있는지 확실하지 않습니다. 프로그램은 끝내기를 계속합니다 (예 : 로그인 컨텍스트가 NULL이었습니다. 프로그램이 반드시 죽어야 함). 그래서 # 1 시도가 실패하고 - 언급 한 바와 같이 - lc = new LoginContext
라인이 비난한다고 생각합니다. 여기서 내가 뭘 잘못하고 있니?
또한 내 응용 프로그램이 런타임에 auth.config를 사용하고 있는지 어떻게 알 수 있습니까? (편집 :이 하위 질문에 대한 답변을 알아 냈습니다 : 명령 줄에서 설정 한 java.security.auth.login.config 설정은 실제로 System 속성이므로 다른 모든 System 속성과 마찬가지로 다음을 사용하여 액세스 할 수 있습니다. System.getProperty("java.security.auth.login.config")
당신은 자신의 대답을 인정하기 위해 체크 표시를 클릭 할 수 있습니다. 그것은 당신이 스스로 검증했기 때문에 그렇게한다면 실제로 더 좋습니다. –
이미 시도했습니다. 2 일을 기다려야한다고 해. –
잊어 버렸습니다. 그것은 사람들이 "게임 시스템을 형성"하는 것을 막기 위해서입니다. 할 일은 없지만 달력에 표시하고 2 일 후에 돌아올 수 있습니다. –