JAAS
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
JAAS는 Java Authentication and Authorization Service의 약자로, Java 플랫폼에서 사용자 인증 및 권한 부여를 위한 표준 라이브러리이다. JAAS는 애플리케이션이 보안 시스템과 통합될 수 있도록 하며, 관리자는 설정 파일을 통해 JAAS를 구성할 수 있다. JAAS는 신원과 자격 증명을 표현하고, 로그인 서비스를 제공하며, 권한 부여를 테스트하는 기능을 제공한다. 또한, 로그인 모듈을 통해 다양한 인증 메커니즘을 지원하며, SSO(Single Sign-On) 프로토콜과 하드웨어 보안 토큰을 사용할 수 있다. JAAS는 로그인 컨텍스트, 주체, 주체, 자격 증명과 같은 주요 구성 요소를 포함한다.
더 읽어볼만한 페이지
- 컴퓨터 접근 제어 - 로그인
로그인은 특정 페이지, 웹사이트 또는 응용 프로그램에 접근하기 위해 사용자 이름과 암호를 입력하여 시스템에 접근하는 절차이며, 1960년대 시분할 시스템과 1970년대 BBS에서 사용되기 시작했다. - 컴퓨터 접근 제어 - SIM 카드
SIM 카드는 이동통신 장치에서 가입자 정보를 저장하고 네트워크를 인증하는 스마트 카드로, 가입자 식별 정보, 인증 정보, 전화번호부 등을 저장하며, 최근에는 내장형 eSIM으로 발전하고 있다. - 자바 플랫폼, 엔터프라이즈 에디션 - IBM 웹스피어
IBM 웹스피어는 IBM에서 출시한 기업용 소프트웨어 제품군 브랜드로, 다양한 애플리케이션 인프라, 비즈니스 프로세스 통합, 정보 통합 및 개발 도구를 포함한다. - 자바 플랫폼, 엔터프라이즈 에디션 - 자카르타 서버 페이지
자카르타 서버 페이지(JSP)는 웹 애플리케이션 개발에 사용되는 서버 측 스크립팅 기술로, 서블릿으로 변환되어 실행되고 HTML 형태로 결과를 반환하며, 지시어, 스크립틀릿, 표현식, 액션 등의 문법 요소, 표현 언어(EL), JSTL을 통해 동적인 웹 페이지를 구현하고 개발 편의성을 높였다. - 컴퓨터 보안 - 얼굴 인식 시스템
얼굴 인식 시스템은 디지털 이미지나 비디오에서 사람 얼굴을 감지하고 식별하는 기술로, 다양한 알고리즘 발전을 거쳐 보안, 신원 확인 등에 활용되지만, 편향성, 개인 정보 침해, 기술적 한계와 같은 윤리적 문제도 야기한다. - 컴퓨터 보안 - 워터마크
워터마크는 종이 제조 시 두께 차이를 이용해 만들어지는 표식으로, 위조 방지를 위해 지폐나 여권 등에 사용되며 댄디 롤 등의 제작 기법을 통해 만들어지고 컴퓨터 프린터 인쇄 기술로도 활용된다.
JAAS | |
---|---|
기본 정보 | |
이름 | 자바 인증 및 권한 부여 서비스 |
원어 이름 | Java Authentication and Authorization Service |
약자 | JAAS |
개요 | |
유형 | 플러그형 인증 모듈(Pluggable Authentication Module)의 자바 구현 |
설명 | 자바 플랫폼에 대한 보안 프레임워크로, 인증 및 권한 부여 기능을 제공 |
역사 | |
최초 릴리스 | 2002년 |
개발자 | 썬 마이크로시스템즈 (현재 오라클) |
특징 | |
기능 | 사용자 인증, 권한 부여, 역할 기반 접근 제어 |
아키텍처 | 플러그형 아키텍처로 다양한 인증 메커니즘 지원 |
표준 | 자바 커뮤니티 프로세스(Java Community Process) 표준 기반 |
활용 | |
사용 분야 | 웹 애플리케이션, 엔터프라이즈 애플리케이션, 보안 시스템 |
예시 | 사용자 로그인 시스템 접근 제어 시스템 감사 시스템 |
기술 정보 | |
언어 | 자바 |
API | 자바 보안 API의 일부 |
모듈 | 플러그형 인증 모듈 (PAM) |
참고 자료 | |
관련 기술 | 자바 보안 관리자 자바 암호화 아키텍처 (JCA) 자바 보안 소켓 확장 (JSSE) |
표준 문서 | 오라클 JAAS 참조 가이드 |
2. 관리
시스템 관리자는 JAAS 설정 파일을 통해 애플리케이션의 보안 정책을 구성한다. JAAS 관리는 주로 두 종류의 설정 파일을 통해 이루어진다.
- `*.login.conf`: 벤더(제공업체)에서 제공하는 로그인 모듈을 특정 애플리케이션에 연결하는 방법을 지정한다.
- `*.policy`: 어떤 신원(사용자 또는 프로그램)에게 어떤 권한을 부여할지를 지정한다.
이 설정 파일들을 통해 시스템 관리자는 애플리케이션의 인증 방식과 접근 권한을 세밀하게 제어할 수 있다. 자세한 설정 방법과 예시는 하위 섹션에서 다룬다.
2. 1. 설정 파일
시스템 관리자에게 JAAS는 두 종류의 설정 파일을 사용한다.- `*.login.conf`: 벤더에서 제공하는 로그인 모듈을 특정 애플리케이션에 연결하는 방법을 지정한다.
- `*.policy`: 어떤 신원(사용자 또는 프로그램)에 어떤 권한을 부여할지를 지정한다.
예를 들어, 애플리케이션은 사용자를 인증하기 위해 다양한 인증 메커니즘을 실행하는 방법을 나타내는 다음과 같은 `login.conf` 파일을 가질 수 있다.
PetShopApplication {
com.sun.security.auth.module.LdapLoginModule sufficient;
com.foo.SmartcardLoginModule requisite;
com.sun.security.auth.module.UnixLoginModule required debug=true;
}
2. 2. 설정 예시
시스템 관리자는 두 종류의 설정 파일을 사용하여 JAAS를 구성할 수 있다.- `*.login.conf`: 특정 애플리케이션이 로그인 시 사용할 인증 모듈과 그 방식을 지정한다. 개발사에서 제공하는 다양한 로그인 모듈을 연결하는 역할을 한다.
- `*.policy`: 어떤 사용자나 프로그램에게 어떤 권한을 부여할지 명시한다.
아래는 애플리케이션이 사용자를 인증하기 위해 여러 인증 메커니즘을 어떻게 사용하는지 보여주는 `login.conf` 파일의 예시이다.
PetShopApplication {
com.sun.security.auth.module.LdapLoginModule sufficient;
com.foo.SmartcardLoginModule requisite;
com.sun.security.auth.module.UnixLoginModule required debug=true;
}
이 예시에서 `PetShopApplication`이라는 애플리케이션은 세 가지 로그인 모듈을 순서대로 사용하도록 설정되었다.
- `com.sun.security.auth.module.LdapLoginModule`: LDAP 인증 모듈. `sufficient` 플래그는 이 모듈 인증에 성공하면 전체 인증이 성공한 것으로 간주하고 뒤따르는 모듈은 실행하지 않음을 의미한다.
- `com.foo.SmartcardLoginModule`: 스마트카드 기반 인증 모듈. `requisite` 플래그는 이 모듈 인증에 반드시 성공해야 함을 의미한다. 실패하면 전체 인증이 즉시 실패 처리된다.
- `com.sun.security.auth.module.UnixLoginModule`: 유닉스 기반 인증 모듈. `required` 플래그는 이 모듈 인증에 성공해야 하지만, 실패하더라도 뒤따르는 모듈(이 경우엔 없음)이 있다면 계속 실행됨을 의미한다. 모든 `required` 모듈 중 하나 이상은 성공해야 전체 인증이 성공한다. `debug=true`는 디버깅 정보를 출력하도록 설정하는 옵션이다.
3. 애플리케이션 인터페이스
JAAS는 애플리케이션 개발자에게 인증 및 권한 부여 기능을 쉽게 구현할 수 있도록 표준 라이브러리를 제공한다. 이를 통해 개발자는 사용자 신원 확인, 자격 증명 관리, 접근 제어 등을 위한 기능을 애플리케이션에 통합할 수 있다.
3. 1. 주요 기능
애플리케이션 개발자에게 JAAS는 다음과 같은 기능을 제공하는 표준 라이브러리이다.4. 보안 시스템 통합
JAAS는 보안 시스템 통합업체가 애플리케이션 보안 기능을 구현할 수 있도록 관련 인터페이스를 제공한다.
4. 1. 제공 인터페이스
JAAS는 보안 시스템 통합업체를 위해 다음과 같은 인터페이스를 제공한다.- 애플리케이션에 ID 네임스페이스를 제공한다.
- 스레드에 자격 증명(''Subject'')을 첨부한다.
- 로그인 모듈을 개발한다. 사용자의 쿼리를 위해 모듈은 콜백을 호출하고 응답을 확인한 후 ''Subject''를 생성한다.
5. 로그인 모듈
로그인 모듈은 권한 부여보다는 주로 인증과 관련이 있으며, JAAS에서 널리 사용되는 구성 요소이다. 로그인 모듈은 `javax.security.auth.spi.LoginModule` 인터페이스를 구현해야 한다. 이 인터페이스는 인증 과정의 각 단계, 예를 들어 초기화, 실제 자격 증명 확인, 인증 성공 시 처리, 실패 시 처리, 로그아웃 시 정리 등을 수행하는 메서드들을 정의하고 있다.
로그인 모듈은 싱글 사인온(SSO) 기능을 제공하거나 하드웨어 보안 토큰의 존재를 확인하는 등 다양한 인증 방식에 활용될 수 있다. 다층 구조(n-tier) 애플리케이션에서는 클라이언트 측과 서버 측 모두에 로그인 모듈이 존재할 수 있다.
5. 1. LoginModule 인터페이스 메서드
로그인 모듈은 권한 부여보다는 주로 인증에 초점을 맞추며, JAAS에서 널리 사용되는 구성 요소이다. 로그인 모듈은 `javax.security.auth.spi.LoginModule` 인터페이스를 구현해야 하며, 이 인터페이스는 다음 메서드들을 정의한다.참고: `Subject`는 로그인을 시도하는 주체(사용자 등)를 의미한다.
- '''initialize''': 로그인 모듈을 초기화하는 역할을 한다. 일반적으로 전달받은 매개변수들을 해당 클래스의 필드에 저장하는 방식으로 구현된다.
- '''login''': 실제로 사용자의 자격 증명을 확인하는 단계이다. `javax.security.auth.Callback` 인터페이스를 구현한 `Object`를 통해 사용자 이름, 비밀번호 등의 자격 증명을 전달받아 데이터베이스 조회 등을 통해 유효성을 검증한다. 사용자에게 직접 로그인을 요청하거나 이전에 얻은 정보를 사용할 수도 있다. 만약 잘못된 자격 증명이 제공되면, 인증 실패를 의미하는 `javax.security.auth.login.FailedLoginException`을 발생시켜야 한다. 단순히 false를 반환하여 해당 로그인 모듈을 건너뛰게 해서는 안 된다.
- '''commit''': 사용자의 신원이 성공적으로 확인된 후 호출된다. 이 메서드에서는 인증된 주체에 대한 `Principal`(사용자 식별 정보) 및 `Groups`(역할 또는 권한 그룹) 정보를 `Subject`에 설정한다. 특히 엔터프라이즈 애플리케이션 환경에서는 애플리케이션 서버가 `Principal`과 `Group` 객체 간의 관계를 특정 방식으로 요구하는 경우가 많으므로 신중하게 구현해야 한다. 인증 과정에서 실패했다면(예: 사용자가 잘못된 로그인 정보 입력) 이 메서드에서도 `javax.security.auth.login.FailedLoginException`을 발생시켜야 한다.
- '''abort''': 인증 프로세스 자체가 어떤 이유로든 실패했을 때 호출된다. 이 메서드가 false를 반환하면, 해당 로그인 모듈의 인증 시도는 무시된다.
- '''logout''': 사용자가 로그아웃할 때 실행되어야 하는 로직을 담는다. 예를 들어, `Subject`에서 관련 `Principal` 정보를 제거하거나 웹 세션을 무효화하는 등의 작업을 수행할 수 있다.
로그인 모듈은 싱글 사인온(SSO) 기능을 제공하기 위해 SAML, OpenID, SPNEGO와 같은 특정 프로토콜이나 프레임워크와 연동될 수 있다. 또한, USB 토큰과 같은 하드웨어 보안 토큰의 존재 여부를 확인하는 데 사용될 수도 있다. N-티어 애플리케이션 구조에서는 클라이언트 측과 서버 측 양쪽에 로그인 모듈이 존재할 수 있다.
5. 2. 싱글 사인온 (SSO)
로그인 모듈은 특정 싱글 사인온(SSO) 프로토콜이나 프레임워크(예: SAML, OpenID, SPNEGO)를 통해 SSO 기능을 제공할 수 있다. 또한, 하드웨어 보안 토큰(예: USB 토큰)의 존재 여부를 확인하는 데 사용될 수도 있다. 다층 구조(n-tier) 애플리케이션에서는 로그인 모듈이 클라이언트 측과 서버 측 모두에 존재할 수 있다.5. 3. LoginModule (javax.security.auth.spi.LoginModule)
`javax.security.auth.spi.LoginModule` 인터페이스를 구현하여 로그인 모듈을 작성한다. 이 모듈에는 실제 인증을 수행하는 코드가 포함된다. 사용자 자격 증명을 확인하기 위해 다양한 방식을 사용할 수 있으며, 예를 들어 데이터베이스에서 비밀번호를 조회하여 사용자가 입력한 비밀번호와 비교하는 코드를 구현할 수 있다.5. 4. LoginContext (javax.security.auth.login.LoginContext)
로그인 컨텍스트는 JAAS 프레임워크의 핵심으로, 주체Subjecteng를 생성하여 인증 프로세스를 시작한다. 인증 프로세스가 진행됨에 따라, 주체는 추가 처리를 위해 다양한 주체Principaleng와 자격 증명Credentialeng으로 채워진다.5. 5. Subject (javax.security.auth.Subject)
주체(Subjecteng)는 인증을 요청하는 단일 사용자, 개체 또는 시스템, 즉 클라이언트를 나타낸다.5. 6. Principal (java.security.Principal)
주체는 특정 대상의 정체성을 나타낸다. 주체는 해당 대상의 특징이나 속성을 캡슐화하며, 여러 개의 주체를 포함할 수도 있다.5. 7. Credentials
자격 증명(Credentials)은 특정 주체에 대한 정보를 의미한다. 예를 들어, 계정 번호, 비밀번호, 인증서 등이 자격 증명에 해당될 수 있다. 자격 증명은 중요한 정보를 담고 있으므로, 이를 안전하게 관리하는 것이 중요하다. 이를 위해 `javax.security.auth.Destroyable
` 및 `javax.security.auth.Refreshable
` 인터페이스가 유용하게 사용될 수 있다.예를 들어, 사용자가 성공적으로 인증을 받은 후, 해당 주체에게 특정 작업을 수행할 수 있는 비밀 정보(자격 증명 형태)를 부여한다고 가정해 보자. 보안상의 이유로 일정 시간이 지나면 이 자격 증명을 파기해야 할 필요가 있을 수 있다. 이러한 경우, 자격 증명 객체가 `
Destroyable
` 인터페이스를 구현하도록 하여 안전하게 정보를 제거할 수 있다.또한, 자격 증명의 유효 기간이 제한적인 경우 `
Refreshable
` 인터페이스를 활용할 수 있다. 이 인터페이스는 자격 증명을 갱신하여 유효 기간을 연장하는 기능을 제공한다.참조
[1]
서적
Java and internet security
https://books.google[...]
iUniverse
[2]
웹사이트
Java Authentication and Authorization Service (JAAS) Reference Guide
https://web.archive.[...]
Oracle Corporation
2012-05-22
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com