OIDC
OpenID Connect
1. 들어가기 앞서
최근 웹 서비스 환경에서는 단일 사용자가 여러 서비스에 접근하는 일이 매우 빈번합니다.
이 과정에서 각 서비스마다 별도의 계정을 관리하는 것은 비효율적이며, 보안적으로도 취약할 수 있습니다.
이러한 문제를 해결하기 위해 등장한 개념이 “통합 인증 (Federated Authentication)”이며,
그 중심에 OAuth 2.0과 OIDC(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단계. 인증 절차
-
사용자가 웹 애플리케이션에서 “로그인” 버튼을 클릭
-
Keycloak 로그인 페이지로 리다이렉트
-
사용자가 인증을 완료하면 Authorization Code 발급
-
애플리케이션 서버가 Code를 이용해 Access Token + ID Token을 획득
-
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 대시보드 등 다양한 환경에서 활용되고 있습니다.