LoginModule — 인증 기술 공급자 인터페이스
LoginModule — 인증 기술 공급자 인터페이스
LoginModule은 인증 기술 공급자를 위한 서비스 공급자 인터페이스예요. LoginModule들은 특정 유형의 인증을 제공하기 위해 애플리케이션 아래에 플러그인돼요. 애플리케이션이 LoginContext API에 맞춰 작성되는 동안, 인증 기술 공급자는 LoginModule 인터페이스를 구현해요.
본문
public interface LoginModule
알려진 구현 클래스로는 JndiLoginModule, KeyStoreLoginModule, Krb5LoginModule, LdapLoginModule, NTLoginModule, UnixLoginModule이 있어요.
구조
Configuration은 특정 로그인 애플리케이션에 사용될 LoginModule을 지정해요. 따라서 다른 LoginModule들이 애플리케이션 자체를 수정하지 않고도 애플리케이션 아래에 플러그인될 수 있어요. LoginContext는 Configuration을 읽고 적절한 LoginModule들을 인스턴스화하는 책임을 가져요.
각 LoginModule은 Subject, CallbackHandler, 공유 LoginModule 상태, 그리고 LoginModule별 옵션으로 초기화돼요. Subject는 현재 인증되고 있는 Subject를 나타내며, 인증이 성공하면 관련 Credentials로 갱신돼요. LoginModule은 CallbackHandler를 사용해 사용자와 통신해요. 예를 들어 CallbackHandler로 사용자 이름과 비밀번호를 묻는 데 사용할 수 있어요. CallbackHandler는 null일 수 있다는 점을 기억해야 해요. Subject를 인증하는 데 CallbackHandler가 반드시 필요한 LoginModule은 LoginException을 던질 수 있어요.
LoginModule은 선택적으로 공유 상태를 사용해 서로 정보나 데이터를 공유해요. LoginModule별 옵션은 관리자나 사용자가 로그인 Configuration에서 이 LoginModule에 구성한 옵션을 나타내요. 옵션은 LoginModule 자체가 정의하고 내부 동작을 제어해요. 예를 들어 디버깅/테스트 기능을 지원하는 옵션을 정의할 수 있어요. 옵션은 debug=true 같은 키-값 문법으로 정의되고, LoginModule은 옵션을 Map으로 저장해서 키로 값을 꺼낼 수 있어요. 옵션 개수에는 제한이 없어요.
두 단계 인증
호출 애플리케이션은 인증 과정을 단일 작업으로 봐요. 하지만 LoginModule 내부의 인증 과정은 두 개의 뚜렷한 단계로 진행돼요. 첫 번째 단계에서는 LoginModule의 login 메서드가 호출되고, 두 번째 단계에서는 commit 메서드가 호출돼요.
핵심 메서드
void initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)—LoginModule을 초기화해요.boolean login() throws LoginException— 인증의 첫 단계를 수행해요.boolean commit() throws LoginException— 인증의 두 번째 단계를 수행해 인증 결과를Subject에 반영해요.boolean abort() throws LoginException— 인증이 실패했을 때 정리 작업을 수행해요.boolean logout() throws LoginException—Subject를 로그아웃해요.