신원 인증 탐색: LDAP에서 현대 프로토콜까지
March 28, 2024
네트워크 애플리케이션의 신원 인증 메커니즘을 구축할 때, 엔지니어들은 다양한 선택에 직면합니다. 한 가지 접근 방식은 사용자 정의 인증 메커니즘을 설계하는 것으로, 이는 특정 새로 개발된 애플리케이션에 적합할 수 있습니다. 다른 접근 방식은 널리 인정받는 인기 있는 표준을 채택하는 것으로, 이는 레거시 애플리케이션과의 호환성을 돕는 것뿐만 아니라 다른 서비스와의 상호 운용성을 보장하여 통합 과정을 단순화합니다. 따라서 강력하고 상호 운용 가능한 신원 인증 서비스를 구축하기 위해서는 일반적인 신원 인증 기술에 대한 깊은 이해가 중요합니다.
LDAP / Active Directory
LDAP(Lightweight Directory Access Protocol)는 디렉토리 서비스에 접근하기 위해 특별히 설계된 IP 기반 프로토콜입니다. 마이크로소프트의 Active Directory도 이 프로토콜을 지원한다는 점이 주목할 만합니다.
디렉토리 서비스는 고유 식별자를 사용하여 사용자, 조직, 장치 등과 같은 다양한 리소스를 조직화하는 특수한 형태의 데이터베이스입니다. 이 구조화된 데이터 저장 방식은 클라이언트가 특정 검색 구문을 사용하여 데이터베이스에서 필요한 리소스를 쿼리할 수 있게 합니다. 디렉토리 서비스에 저장된 리소스는 사용자의 이름, 이메일, 전화번호 등과 같은 풍부한 속성 정보를 포함할 수 있습니다. 특정 LDAP 서버의 경우, 일반적으로 속성 키와 값에 대한 요구 사항을 지정하는 내장 템플릿이 있어 데이터의 정확성을 보장합니다.
기업 환경에서 LDAP/Active Directory 애플리케이션은 특히 널리 퍼져 있습니다. 기업은 부서별로 직원 정보를 계층 구조로 저장할 수 있으며, 각 "사용자" 리소스는 직원의 기본 정보와 사용자 자격 증명을 저장할 수 있습니다.
애플리케이션에서의 LDAP 통합
많은 기존 애플리케이션에서 LDAP 프로토콜 통합은 내장되거나 확장 메커니즘을 기반으로 구현된 중요한 기능이 되었습니다. Apache APISIX를 예로 들면, 유연한 플러그인 메커니즘을 통해 LDAP 통합을 성공적으로 구현했습니다. 이 통합을 통해 클라이언트는 기본 인증 형식으로 사용자 이름과 비밀번호를 보낸 다음, LDAP 서버에서 사용자 자격 증명을 쿼리하고 검증하여 API 요청을 효과적으로 보호할 수 있습니다.
엔지니어들이 개발한 애플리케이션과 서비스에서도 LDAP 프로토콜을 활용하여 사용자 관리 및 인증 기능을 구현할 수 있습니다. 특정 프로그래밍 언어에서 제공하는 LDAP 클라이언트 라이브러리를 사용하면 LDAP 서비스에 쉽게 연결할 수 있습니다. 연결이 설정되면 Search API를 사용하여 디렉토리의 리소스를 쿼리하고 필요한 사용자 속성을 검색할 수 있습니다.
LDAP의 장단점
장점
-
중앙 집중식 저장 및 효율적인 쿼리: 데이터는 디렉토리 서비스에 중앙 집중식으로 저장되며, 그 조직 구조는 쿼리 속도를 크게 향상시켜 대량의 읽기 요청을 쉽게 처리할 수 있습니다.
-
직관적인 트리 구조: 디렉토리 서비스의 트리 구조는 현실 세계의 조직 구조와 매우 유사하여 리소스를 리프 노드에 편리하게 인덱싱할 수 있어 사용자의 직관과 일치합니다.
-
널리 적용된 통합: 그 성숙도와 안정성으로 인해 LDAP 프로토콜은 많은 소프트웨어에서 내장 통합 지원을 제공합니다.
단점
-
구식 프로토콜: LDAP 프로토콜은 초기에 설계되어 ASN.1 인코딩을 사용하며, 이는 오늘날의 주류 JSON 형식과 크게 다르기 때문에 통합이 다소 어려울 수 있습니다.
-
제한된 기능 및 호환성 문제: 프로토콜 자체의 기능이 제한적이어서 일부 LDAP 서버 소프트웨어가 비표준 방식으로 확장해야 하며, 이는 다른 LDAP 서버 간의 호환성에 영향을 미칠 수 있습니다.
-
복잡한 구성 및 보안 문제: LDAP 서버 구성에는 TLS 및 데이터 접근 제어와 같은 많은 보안 요소가 포함되어 있어 올바른 구성을 보장하기 위해 풍부한 경험이 필요하며, 그렇지 않으면 데이터 유출 위험이 있습니다.
-
애플리케이션 구현 난이도: 애플리케이션 관점에서 LDAP 서버에 접근하는 것은 데이터베이스에 접근하는 것과 유사하며, Search와 같은 하위 수준 API를 사용하여 데이터에 접근해야 하므로 애플리케이션 개발자에게 높은 요구를 부과합니다.
LDAP의 현대화
현재 기술 환경에서 LDAP 프로토콜이 다소 구식으로 보일 수 있지만, 여전히 많은 주류 소프트웨어에서 고전적인 표준으로 널리 지원되고 있습니다. 많은 기업들이 여전히 LDAP을 사용하여 조직 내 다양한 리소스를 관리하며, 그 안정성과 신뢰성은 실제 애플리케이션에서 검증되었습니다.
현대 애플리케이션에서 LDAP 프로토콜의 일부 한계를 극복하기 위해 일부 미들웨어 제품이 등장했습니다. 이러한 미들웨어는 내부적으로 LDAP 프로토콜을 캡슐화하고 더 현대적이고 사용자 친화적인 프로토콜 인터페이스를 제공합니다. 예를 들어 OpenID Connect와 같은 것들이 있습니다:
- Dex: https://dexidp.io
- Keycloak: https://www.keycloak.org
이들은 프로토콜 변환과 적응을 처리하여 애플리케이션 개발자에게 현대적인 프로토콜을 제공하여 통합 작업량을 줄입니다.
이러한 미들웨어 제품은 프로토콜 변환과 적응을 담당하여 애플리케이션 개발자에게 더 현대적이고 효율적인 통합 방법을 제공함으로써 LDAP 통합에 필요한 작업량을 효과적으로 줄입니다.
HTTP 기반 신원 인증 메커니즘
신원 인증 분야에서 HTTP 기반 프로토콜은 중요한 역할을 합니다. OpenID Connect(OIDC), SAML, CAS가 그 대표적인 예입니다.
OpenID Connect
OpenID Connect는 OAuth 2의 확장으로, 권한 부여 기능뿐만 아니라 신원 인증 기능도 강화합니다. OAuth 2의 제한된 기능에 비해 OIDC는 핵심 id_token 기능과 OIDC discovery 표준과 같은 더 풍부한 기능을 제공합니다.
OIDC의 장점은 그 널리 적용된 애플리케이션과 풍부한 생태계에 있습니다. 다양한 프로그래밍 언어로 성숙한 서버 및 클라이언트 구현이 가능하여 통합 및 배포가 용이합니다. 또한 OIDC는 다른 기술과 결합할 수 있으며, 예를 들어 JSON Web Tokens(JWT)를 토큰으로 사용하여 그 무상태성을 활용하여 신원 인증 서비스의 부하를 줄일 수 있습니다.
CAS
CAS(Central Authentication Service)는 웹 시나리오에서 널리 사용되는 신원 인증 프로토콜로, 단일 사인온 기능을 구현하는 데 사용됩니다. CAS 프로토콜은 설계가 비교적 단순하며 다양한 애플리케이션에 쉽게 통합할 수 있습니다. 또한, 이것은 프로덕션에서 사용될 수 있습니다. Keycloak과 같은 신원 인증 관리 플랫폼도 CAS 프로토콜을 지원하여 그 적용 범위를 더욱 확장합니다.
SAML
SAML(Security Assertion Markup Language)은 오랜 역사를 가진 신원 인증 프로토콜로, 현재 버전인 SAML 2.0은 2005년에 출시되었습니다. 이 프로토콜은 서비스 간 통신을 위해 XML을 인코딩 방법으로 사용하며 고유한 데이터 구조를 정의합니다. 그러나 SAML의 구현이 상대적으로 복잡하고 사용이 직관적이지 않아 OIDC 및 CAS와 같은 현대 신원 인증 프로토콜과 비교했을 때 그 장점이 덜 두드러집니다.
그럼에도 불구하고 Keycloak과 같은 신원 및 접근 관리 솔루션은 특정 시나리오에서의 신원 인증 요구를 충족시키기 위해 SAML의 서버 구현을 제공합니다.
사용자 신원 동기화 및 관리
일반적인 시나리오를 고려해 보겠습니다: 기업은 직원들에게 여러 내부 애플리케이션 시스템을 제공하고 사용자 경험을 향상시키기 위해 단일 사인온을 채택합니다. 그러나 새로운 직원이 입사하거나 기존 직원이 퇴사할 때마다 IT 관리자는 다양한 시스템에서 수동으로 계정을 생성하거나 삭제해야 하며, 이 과정은 번거로울 뿐만 아니라 잠재적인 보안 위험을 동반합니다.
이 문제를 해결하기 위해 IT 관리자는 표준화되고 자동화된 사용자 계정 관리 도구가 절실히 필요합니다. 이러한 배경에서 SCIM(System for Cross-domain Identity Management) 표준이 등장합니다.
SCIM 표준은 IDP(신원 제공자)와 애플리케이션 시스템 또는 SaaS 서비스 간의 원활한 상호 운용성을 달성하기 위해 설계된 일련의 특정 REST API를 정의합니다. 이러한 API를 통해 사용자는 계정을 자동으로 구성할 수 있어 계정 생성, 업데이트 및 삭제 과정을 크게 단순화합니다.
SCIM 프로토콜은 도입된 이후 널리 채택되고 적용되었습니다. 예를 들어, Microsoft Entra ID(이전의 Azure Active Directory) 및 Okta와 같은 잘 알려진 신원 관리 솔루션은 SCIM 프로토콜을 지원합니다. 또한 Keycloak과 같은 오픈소스 신원 및 접근 관리 플랫폼도 SCIM 서버/클라이언트 확장을 제공하여 그 적용 시나리오를 더욱 풍부하게 합니다.
결론
이 글은 신원 인증 시나리오에서 널리 사용되는 주요 기술을 간략히 설명합니다. 효율적이고 안전한 신원 인증 서비스를 구축하는 과정에서 이러한 성숙된 기술 솔루션은 중요한 역할을 합니다. 이들은 통합 작업을 크게 단순화하고 작업 효율성을 향상시키는 것뿐만 아니라 보안 위험을 효과적으로 줄여 기업 데이터와 사용자 정보의 안전을 보장합니다. 이러한 기술 솔루션을 활용함으로써 우리는 현대 신원 인증의 요구를 더 잘 충족시킬 수 있으며, 기업과 사용자 모두에게 더 편리하고 안전한 경험을 제공할 수 있습니다.