메뉴 닫기

OIDC

OIDC 

OpenID Connect

Fundamentals by Nevis: What is OIDC

 

1. 들어가기 앞서

최근 웹 서비스 환경에서는 단일 사용자가 여러 서비스에 접근하는 일이 매우 빈번합니다.

이 과정에서 각 서비스마다 별도의 계정을 관리하는 것은 비효율적이며, 보안적으로도 취약할 수 있습니다.

이러한 문제를 해결하기 위해 등장한 개념이 “통합 인증 (Federated Authentication)”이며,

그 중심에 OAuth 2.0OIDC(OpenID Connect) 표준이 존재합니다.

특히, 기업 환경에서는 이러한 인증 구조를 손쉽게 구현하기 위한 솔루션으로 Keycloak과 같은 오픈소스 IdP(Identity Provider)가 널리 사용되고 있습니다.

 

 

2. Authentication (인증)

**인증(Authentication)**은 사용자가 주장하는 신원을 검증하는 절차를 의미합니다.

즉, “이 사용자가 정말 그 계정의 소유자인가?”를 확인하는 과정입니다.

일반적인 인증 수단에는 다음이 있습니다.

  • ID/Password 기반 로그인

  • OTP, 이메일 인증, FIDO2 등 2단계 인증

  • 조직 내 LDAP 또는 Active Directory 기반 계정 연동

Keycloak은 이러한 인증 수단을 통합 관리할 수 있는 중앙 인증 서버(Centralized Authentication Server) 역할을 수행합니다.

예를 들어, 여러 내부 서비스가 있을 때, 각 서비스는 직접 로그인 절차를 구현할 필요 없이

모두 Keycloak을 통해 인증 요청을 위임할 수 있습니다. 이를 **SSO(Single Sign-On)**라고 합니다.

 

 

3. OAuth 2.0 (인가 프레임워크)

OAuth 2.0은 기본적으로 **인가(Authorization)**를 위한 프레임워크입니다.

즉, 사용자의 비밀번호를 제3자 애플리케이션에 노출하지 않고도,

해당 애플리케이션이 제한된 범위 내에서 사용자 정보를 접근하도록 허용합니다.

주요 구성 요소

  • Resource Owner (사용자): 자신의 자원(프로필, 이메일 등)을 소유한 주체

  • Client (서비스 제공자): 사용자의 동의하에 자원 접근을 요청하는 애플리케이션

  • Authorization Server (인증 서버): 사용자의 동의를 받아 Access Token을 발급

  • Resource Server (자원 서버): Access Token을 통해 보호된 리소스(API)를 제공

Keycloak은 이 중 Authorization Server 역할을 수행하며,

OAuth 2.0의 Authorization Code Flow를 통해 토큰을 발급합니다.

예를 들어, 사용자가 https://app.example.com에 로그인할 때

Keycloak 로그인 페이지로 리다이렉트되고, 인증 성공 시 Authorization Code가 발급됩니다.

이 코드를 사용하여 Access Token을 교환하면, 클라이언트는 API 호출 시 토큰을 사용해 인가를 수행할 수 있습니다.

 

 

4. OIDC (OpenID Connect)

OAuth 2.0은 “권한 위임”에 초점이 맞춰져 있지만,

“사용자가 누구인지”를 식별하는 기능은 포함하지 않습니다.

이를 보완하기 위해 OAuth 2.0 위에 인증(Authentication) 기능을 추가한 표준이 **OIDC(OpenID Connect)**입니다.

OIDC의 핵심 요소

  • ID Token

    JWT(JSON Web Token) 형태로 발급되며, 로그인한 사용자의 식별 정보(예: sub, email, name)가 포함됩니다.

  • UserInfo Endpoint

    Access Token을 이용해 사용자의 상세 정보를 가져올 수 있는 API입니다.

  • Discovery Document (.well-known/openid-configuration)

    클라이언트가 OIDC 서버의 메타데이터(인증 엔드포인트, 토큰 엔드포인트, 키 정보 등)를 자동으로 파악할 수 있게 해줍니다.

Keycloak은 이러한 모든 구성요소를 기본적으로 제공합니다.

예를 들어, Keycloak의 OIDC 메타데이터는 다음 경로에서 확인할 수 있습니다.

 

https://<KEYCLOAK_HOST>/realms/<REALM_NAME>/.well-known/openid-configuration

 

이 문서에는 다음과 같은 엔드포인트 정보가 포함되어 있습니다:

  • Authorization Endpoint

  • Token Endpoint

  • UserInfo Endpoint

  • JWKS (JSON Web Key Set) URI

이를 통해 클라이언트 애플리케이션은 Keycloak과 OIDC 기반으로 자동 연동을 수행할 수 있습니다.

 

5. Keycloak을 통한 OIDC 연동 예시

다음은 간단한 웹 서비스가 Keycloak과 OIDC를 통해 로그인 기능을 구현하는 과정입니다.

1단계. Realm 및 Client 생성

Keycloak 관리자 콘솔에서 새로운 Realm을 생성한 뒤,

OIDC를 사용할 Client를 등록합니다.

  • Client Protocol: openid-connect

  • Access Type: confidential (서버사이드 애플리케이션의 경우)

  • Redirect URI: 로그인 완료 후 돌아올 서비스 주소

2단계. 클라이언트 애플리케이션 설정

웹 서비스에서 Keycloak OIDC 정보를 설정합니다.

예를 들어, Python Flask에서 python-keycloak 또는 Authlib 라이브러리를 통해

다음과 같은 정보를 환경 변수로 구성할 수 있습니다:

OIDC_CLIENT_ID = "app-client"
OIDC_CLIENT_SECRET = "********"
OIDC_DISCOVERY_URL = "<https://auth.example.com/realms/company/.well-known/openid-configuration>"

 

3단계. 인증 절차

  1. 사용자가 웹 애플리케이션에서 “로그인” 버튼을 클릭

  2. Keycloak 로그인 페이지로 리다이렉트

  3. 사용자가 인증을 완료하면 Authorization Code 발급

  4. 애플리케이션 서버가 Code를 이용해 Access Token + ID Token을 획득

  5. ID Token을 검증하고 사용자 세션 생성

이렇게 하면 Keycloak이 중앙에서 인증을 처리하고,

애플리케이션은 사용자의 비밀번호를 직접 다루지 않으면서

안전하게 로그인 세션을 관리할 수 있습니다.

 

 

6. 정리

구분 OAuth 2.0 OIDC(OpenID Connect)
주요 목적 인가(Authorization) 인증(Authentication)
발급 토큰 Access Token Access Token + ID Token
사용자 정보 포함 없음 있음 (ID Token, UserInfo API)
주요 구성요소 Client, Resource Server ID Token, Discovery Document, UserInfo Endpoint
예시 솔루션 Keycloak, Okta, Azure AD Keycloak, Google Identity, Auth0

OIDC는 OAuth 2.0 기반의 인증 계층을 제공함으로써,

보안성 높은 통합 로그인 환경(SSO)을 구현할 수 있게 합니다.

특히 Keycloak은 이러한 표준을 손쉽게 구현할 수 있는 오픈소스 솔루션으로,

기업 내부 서비스, 클라우드 플랫폼, Kubernetes 대시보드 등 다양한 환경에서 활용되고 있습니다.

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x