Skip to content

ScriptonBasestar/sb-keycloak-exts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Keycloak Extensions - Korean Social Identity Providers

말 κ·ΈλŒ€λ‘œ Keycloak의 ν™•μž₯ κΈ°λŠ₯!!! Keycloak Extensions for Korean Social Logins!

ν”„λ‘œμ νŠΈ κ°œμš” (Overview)

이 ν”„λ‘œμ νŠΈλŠ” ν•œκ΅­μ˜ μ£Όμš” μ†Œμ…œ 둜그인 μ„œλΉ„μŠ€λ“€μ„ Keycloakκ³Ό 톡합할 수 μžˆλŠ” Identity Provider ν™•μž₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

This project provides Keycloak identity provider extensions for popular Korean social login services and international OAuth2 providers.

μ§€μ›ν•˜λŠ” μ†Œμ…œ 둜그인 (Supported Providers)

ν•œκ΅­ μ†Œμ…œ 둜그인 μ„œλΉ„μŠ€

  • Kakao (카카였) - ν•œκ΅­μ—μ„œ κ°€μž₯ 인기 μžˆλŠ” λ©”μ‹œμ§• ν”Œλž«νΌ
  • LINE (라인) - ν•œκ΅­κ³Ό μΌλ³Έμ—μ„œ 널리 μ‚¬μš©λ˜λŠ” λ©”μ‹œμ§• μ•±
  • Naver (넀이버) - ν•œκ΅­μ˜ λŒ€ν‘œμ μΈ 검색 μ—”μ§„ 및 μ›Ή 포털

κΈ€λ‘œλ²Œ μ†Œμ…œ 둜그인 μ„œλΉ„μŠ€

  • Google - ꡬ글 κ³„μ •μœΌλ‘œ 둜그인 (OpenID Connect 지원)
  • GitHub - κΉƒν—ˆλΈŒ κ³„μ •μœΌλ‘œ 둜그인

Event Listener ν™•μž₯

Keycloak 이벀트λ₯Ό λ‹€μ–‘ν•œ λ©”μ‹œμ§• μ‹œμŠ€ν…œμœΌλ‘œ μ‹€μ‹œκ°„ 슀트리밍:

λ©”μ‹œμ§• μ‹œμŠ€ν…œ 지원

  • Kafka - Apache Kafka둜 이벀트 슀트리밍
  • RabbitMQ - RabbitMQ λ©”μ‹œμ§€ 큐둜 이벀트 전솑
  • NATS - NATS λ©”μ‹œμ§• μ‹œμŠ€ν…œ 톡합
  • Redis - Redis Pub/Sub둜 이벀트 λ°œν–‰
  • MQTT - MQTT 브둜컀둜 IoT 톡합 ✨ NEW
  • AWS - AWS SNS/SQS둜 이벀트 전솑
  • Azure - Azure Service Bus/Event Grid 톡합

Event Listener μ£Όμš” κΈ°λŠ₯

  • Resilience Patterns: Circuit Breaker, Retry, Dead Letter Queue, Batch Processing
  • Metrics & Monitoring: Prometheus λ©”νŠΈλ¦­, μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§
  • Security: TLS/SSL, 인증, μ•”ν˜Έν™” 지원
  • High Performance: 비동기 처리, 배치 처리, μ—°κ²° 풀링
  • Production-Ready: μ™„μ „ν•œ μ—λŸ¬ 처리, λ‘œκΉ…, ν…ŒμŠ€νŠΈ 컀버리지

🏒 Realm 관리 ν™•μž₯

Keycloak Realm의 κ³ κΈ‰ 관리 κΈ°λŠ₯ 제곡:

Realm Hierarchy Manager ✨ NEW

  • 계측 ꡬ쑰: Realm κ°„ λΆ€λͺ¨-μžμ‹ 관계 μ„€μ •
  • μ„€μ • 상속: Identity Provider, Role μžλ™ 상속
  • μžλ™ 동기화: λΆ€λͺ¨ Realm 변경사항 μžλ™ μ „νŒŒ
  • REST API: 계측 ꡬ쑰 κ΄€λ¦¬μš© μ™„μ „ν•œ REST API
  • 이벀트 기반: Realm λ³€κ²½ μžλ™ 감지 및 처리

μ‚¬μš© 사둀:

  • μ—”ν„°ν”„λΌμ΄μ¦ˆ SaaS (λŒ€κΈ°μ—… β†’ μžνšŒμ‚¬ β†’ 지사)
  • λ©€ν‹°ν…Œλ„ŒνŠΈ ν”Œλž«νΌ (ν”Œλž«νΌ β†’ ν…Œλ„ŒνŠΈ β†’ ν™˜κ²½)
  • λŒ€κ·œλͺ¨ 쑰직 (본사 β†’ λΆ€μ„œ β†’ νŒ€)

μžμ„Έν•œ λ‚΄μš©μ€ Realm Hierarchy λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

🎨 κΈ°μ—…μš© 둜그인 ν…Œλ§ˆ

κΉ”λ”ν•˜κ³  λͺ¨λ˜ν•œ κΈ°μ—… ν™˜κ²½μš© Keycloak 둜그인 ν…Œλ§ˆ 제곡:

Corporate Clean Theme

  • λ―Έλ‹ˆλ©€ λ””μžμΈ: κΉ”λ”ν•˜κ³  전문적인 UI
  • λ°˜μ‘ν˜• 지원: λ°μŠ€ν¬ν†±, νƒœλΈ”λ¦Ώ, λͺ¨λ°”일 μ™„λ²½ λŒ€μ‘
  • λ‹€κ΅­μ–΄ 지원: μ˜μ–΄, ν•œκ΅­μ–΄, 일본어
  • μ†Œμ…œ 둜그인 μŠ€νƒ€μΌλ§: Kakao, Naver, Google, GitHub, LINE λ“±
  • μ ‘κ·Όμ„±: WCAG 2.1 AA μ€€μˆ˜
  • μ»€μŠ€ν„°λ§ˆμ΄μ§•: 색상, 둜고, λ°°κ²½ μ‰½κ²Œ λ³€κ²½ κ°€λŠ₯

μžμ„Έν•œ λ‚΄μš©μ€ ν…Œλ§ˆ λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

μ£Όμš” κΈ°λŠ₯ (Features)

  • 각 ν”Œλž«νΌκ³Όμ˜ μ™„μ „ν•œ OAuth2 톡합
  • μžλ™ μ‚¬μš©μž 속성 λ§€ν•‘
  • ν”„λ‘œν•„ 이미지, 이메일 λ“± μ‚¬μš©μž 속성 지원
  • μ»€μŠ€ν…€ 속성 맀퍼 지원
  • 포괄적인 μ—λŸ¬ 처리둜 ν”„λ‘œλ•μ…˜ ν™˜κ²½ λŒ€μ‘
  • λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈμ— λŒ€ν•œ λ‹¨μœ„ ν…ŒμŠ€νŠΈ
  • GitHub Actions CI/CD νŒŒμ΄ν”„λΌμΈ 지원

μš”κ΅¬μ‚¬ν•­ (Requirements)

  • Keycloak 26.3.1 이상
  • Java 21 이상
  • Gradle 8.8 (wrapper 포함)

λΉ λ₯Έ μ‹œμž‘ (Quick Start)

ν”„λ‘œμ νŠΈ λΉŒλ“œ

  1. μ €μž₯μ†Œ 클둠:

    git clone https://github.com/yourusername/sb-keycloak-exts.git
    cd sb-keycloak-exts
  2. λͺ¨λ“  provider λΉŒλ“œ:

    ./gradlew shadowJar
  3. JAR 파일 생성 μœ„μΉ˜:

    Identity Providers:

    • idps/idp-kakao/build/libs/idp-kakao-*-all.jar
    • idps/idp-line/build/libs/idp-line-*-all.jar
    • idps/idp-naver/build/libs/idp-naver-*-all.jar
    • idps/idp-google/build/libs/idp-google-*-all.jar
    • idps/idp-github/build/libs/idp-github-*-all.jar

    Event Listeners:

    • events/event-listener-kafka/build/libs/keycloak-kafka-event-listener-*-all.jar
    • events/event-listener-rabbitmq/build/libs/keycloak-rabbitmq-event-listener-*-all.jar
    • events/event-listener-nats/build/libs/keycloak-nats-event-listener-*-all.jar
    • events/event-listener-redis/build/libs/keycloak-redis-event-listener-*-all.jar
    • events/event-listener-mqtt/build/libs/keycloak-mqtt-event-listener-*-all.jar ✨
    • events/event-listener-aws/build/libs/keycloak-aws-event-listener-*-all.jar
    • events/event-listener-azure/build/libs/keycloak-azure-event-listener-*-all.jar

    Realm Management:

    • realms/realm-hierarchy/build/libs/realm-hierarchy-*-all.jar ✨

    Corporate Themes:

    • themes/build/libs/keycloak-theme-corporate-clean.jar 🎨
    • themes/build/libs/keycloak-theme-corporate-base.jar

μ„€μΉ˜

  1. μ›ν•˜λŠ” ν™•μž₯ JARλ₯Ό Keycloak에 볡사:

    # Identity Providers
    cp idps/idp-*/build/libs/*-all.jar $KEYCLOAK_HOME/providers/
    
    # Event Listeners (선택사항)
    cp events/event-listener-*/build/libs/*-all.jar $KEYCLOAK_HOME/providers/
    
    # Corporate Themes (선택사항) 🎨
    cp themes/build/libs/*.jar $KEYCLOAK_HOME/providers/
  2. Keycloak λΉŒλ“œ 및 μž¬μ‹œμž‘:

    $KEYCLOAK_HOME/bin/kc.sh build
    $KEYCLOAK_HOME/bin/kc.sh start
  3. (ν…Œλ§ˆ μ‚¬μš© μ‹œ) Keycloak 관리 μ½˜μ†”μ—μ„œ ν…Œλ§ˆ μ„€μ •:

    • Realm Settings β†’ Themes β†’ Login Theme: corporate-clean 선택

μ„€μ • κ°€μ΄λ“œ (Configuration Guide)

1. μ†Œμ…œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„€μ •

각 μ†Œμ…œ ν”Œλž«νΌμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 생성해야 ν•©λ‹ˆλ‹€:

ν•œκ΅­ μ†Œμ…œ ν”Œλž«νΌ

κΈ€λ‘œλ²Œ μ†Œμ…œ ν”Œλž«νΌ

μžμ„Έν•œ μ„€μ • 방법은 각 provider의 READMEλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”:

2. Keycloak 관리 μ½˜μ†” μ„€μ •

  1. Keycloak 관리 μ½˜μ†” 둜그인
  2. Realm 선택
  3. Identity Providers λ©”λ‰΄λ‘œ 이동
  4. Add provider λ“œλ‘­λ‹€μš΄ 클릭
  5. μ›ν•˜λŠ” provider 선택 (Kakao, LINE, Naver, Google, λ˜λŠ” GitHub)
  6. Provider μ„€μ • μž…λ ₯

3. Redirect URI μ„€μ •

각 providerλŠ” λ‹€μŒ ν˜•μ‹μ˜ redirect URIλ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€:

https://your-keycloak-domain.com/realms/{realm}/broker/{provider}/endpoint

{provider}λŠ” kakao, line, naver, google, λ˜λŠ” github 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈ (Testing)

λ‹¨μœ„ ν…ŒμŠ€νŠΈ (Unit Tests)

λͺ¨λ“  λ‹¨μœ„ ν…ŒμŠ€νŠΈ μ‹€ν–‰:

./gradlew test

νŠΉμ • provider ν…ŒμŠ€νŠΈ:

./gradlew :idps:idp-kakao:test
./gradlew :idps:idp-line:test
./gradlew :idps:idp-naver:test
./gradlew :idps:idp-google:test
./gradlew :idps:idp-github:test

톡합 ν…ŒμŠ€νŠΈ (Integration Tests)

Event Listener λͺ¨λ“ˆλ“€μ€ TestContainers 기반 톡합 ν…ŒμŠ€νŠΈλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€:

톡합 ν…ŒμŠ€νŠΈ μ‹€ν–‰ (Docker ν•„μš”):

# Kafka 톡합 ν…ŒμŠ€νŠΈ
./gradlew :events:event-listener-kafka:integrationTest

# RabbitMQ 톡합 ν…ŒμŠ€νŠΈ
./gradlew :events:event-listener-rabbitmq:integrationTest

# Redis 톡합 ν…ŒμŠ€νŠΈ
./gradlew :events:event-listener-redis:integrationTest

# NATS 톡합 ν…ŒμŠ€νŠΈ
./gradlew :events:event-listener-nats:integrationTest

# MQTT 톡합 ν…ŒμŠ€νŠΈ (선택사항 - κ΅¬ν˜„ κ°€λŠ₯)
# ./gradlew :events:event-listener-mqtt:integrationTest

μ£Όμ˜μ‚¬ν•­:

  • 톡합 ν…ŒμŠ€νŠΈλŠ” Dockerκ°€ μ‹€ν–‰ 쀑이어야 ν•©λ‹ˆλ‹€
  • TestContainersκ°€ μžλ™μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹œμž‘/μ€‘μ§€ν•©λ‹ˆλ‹€
  • CI/CD νŒŒμ΄ν”„λΌμΈμ—μ„œλŠ” 릴리즈 μ‹œμ—λ§Œ μžλ™ μ‹€ν–‰λ©λ‹ˆλ‹€
  • μˆ˜λ™ μ‹€ν–‰ μ‹œ: GitHub Actions β†’ integration-tests μ›Œν¬ν”Œλ‘œμš° β†’ "Run workflow" 클릭

ν…ŒμŠ€νŠΈ 컀버리지

Identity Providers (λ‹¨μœ„ ν…ŒμŠ€νŠΈ):

  • OAuth2 ν”Œλ‘œμš° ν…ŒμŠ€νŠΈ
  • μ‚¬μš©μž ν”„λ‘œν•„ λ§€ν•‘ ν…ŒμŠ€νŠΈ
  • μ—λŸ¬ 처리 μ‹œλ‚˜λ¦¬μ˜€ ν…ŒμŠ€νŠΈ
  • JSON νŒŒμ‹± 및 데이터 λ³€ν™˜ ν…ŒμŠ€νŠΈ

Event Listeners (톡합 ν…ŒμŠ€νŠΈ):

  • μ»¨ν…Œμ΄λ„ˆ μ‹œμž‘ 및 μ—°κ²° 확인
  • λ©”μ‹œμ§€ λ°œν–‰/ꡬ독 ν…ŒμŠ€νŠΈ
  • Keycloak Realm μ„€μ • 검증
  • μ„±λŠ₯ ν…ŒμŠ€νŠΈ (λ©”μ‹œμ§€ μ²˜λ¦¬λŸ‰)
  • Keycloak 이벀트 β†’ λ©”μ‹œμ§• μ‹œμŠ€ν…œ E2E ν…ŒμŠ€νŠΈ

ν”„λ‘œμ νŠΈ ꡬ쑰 (Project Structure)

sb-keycloak-exts/
β”œβ”€β”€ .github/
β”‚   └── workflows/         # GitHub Actions μ›Œν¬ν”Œλ‘œμš°
β”‚       β”œβ”€β”€ ci.yml         # CI νŒŒμ΄ν”„λΌμΈ
β”‚       └── release.yml    # 릴리즈 μžλ™ν™”
β”œβ”€β”€ build.gradle           # 루트 λΉŒλ“œ μ„€μ •
β”œβ”€β”€ gradle.properties      # Gradle 속성
β”œβ”€β”€ settings.gradle        # λ©€ν‹° λͺ¨λ“ˆ μ„€μ •
└── idps/                  # Identity providers λͺ¨λ“ˆ
    β”œβ”€β”€ build.gradle       # IDP λͺ¨λ“ˆ μ„€μ •
    β”œβ”€β”€ idp-kakao/         # Kakao provider
    β”‚   β”œβ”€β”€ src/
    β”‚   β”‚   β”œβ”€β”€ main/      # μ†ŒμŠ€ μ½”λ“œ
    β”‚   β”‚   └── test/      # ν…ŒμŠ€νŠΈ μ½”λ“œ
    β”‚   └── README.md      # Kakao μ„€μ • κ°€μ΄λ“œ
    β”œβ”€β”€ idp-line/          # LINE provider
    β”‚   β”œβ”€β”€ src/
    β”‚   β”‚   β”œβ”€β”€ main/      # μ†ŒμŠ€ μ½”λ“œ
    β”‚   β”‚   └── test/      # ν…ŒμŠ€νŠΈ μ½”λ“œ
    β”‚   └── README.md      # LINE μ„€μ • κ°€μ΄λ“œ
    β”œβ”€β”€ idp-naver/         # Naver provider
    β”‚   β”œβ”€β”€ src/
    β”‚   β”‚   β”œβ”€β”€ main/      # μ†ŒμŠ€ μ½”λ“œ
    β”‚   β”‚   └── test/      # ν…ŒμŠ€νŠΈ μ½”λ“œ
    β”‚   └── README.md      # Naver μ„€μ • κ°€μ΄λ“œ
    β”œβ”€β”€ idp-google/        # Google provider
    β”‚   β”œβ”€β”€ src/
    β”‚   β”‚   β”œβ”€β”€ main/      # μ†ŒμŠ€ μ½”λ“œ
    β”‚   β”‚   └── test/      # ν…ŒμŠ€νŠΈ μ½”λ“œ
    β”‚   └── README.md      # Google μ„€μ • κ°€μ΄λ“œ
    └── idp-github/        # GitHub provider
        β”œβ”€β”€ src/
        β”‚   β”œβ”€β”€ main/      # μ†ŒμŠ€ μ½”λ“œ
        β”‚   └── test/      # ν…ŒμŠ€νŠΈ μ½”λ“œ
        └── README.md      # GitHub μ„€μ • κ°€μ΄λ“œ

문제 ν•΄κ²° (Troubleshooting)

일반적인 문제

  1. Providerκ°€ Keycloak에 λ‚˜νƒ€λ‚˜μ§€ μ•ŠμŒ

    • JAR 파일이 μ˜¬λ°”λ₯Έ 디렉토리에 μžˆλŠ”μ§€ 확인
    • Keycloak λ‘œκ·Έμ—μ„œ λ‘œλ”© 였λ₯˜ 확인
    • shadowJar둜 λΉŒλ“œν–ˆλŠ”μ§€ 확인
  2. 인증 μ‹€νŒ¨

    • Client ID와 Secret이 μ˜¬λ°”λ₯Έμ§€ 확인
    • Redirect URI μ„€μ • 확인
    • μ†Œμ…œ ν”Œλž«νΌμ—μ„œ ν•„μš”ν•œ κΆŒν•œμ΄ ν™œμ„±ν™”λ˜μ—ˆλŠ”μ§€ 확인

쀑μž₯κΈ° κ°œμ„  λ°©ν–₯ (Future Improvements)

  1. CI/CD νŒŒμ΄ν”„λΌμΈ βœ… μ™„λ£Œ

    • GitHub Actions μ›Œν¬ν”Œλ‘œμš° ꡬ성
    • μžλ™ ν…ŒμŠ€νŠΈ 및 배포
    • 닀쀑 Java 버전 ν…ŒμŠ€νŠΈ (17, 21)
  2. μΆ”κ°€ IDP κ΅¬ν˜„ πŸ”„ 진행쀑

  3. 이벀트 λ¦¬μŠ€λ„ˆ βœ… μ™„λ£Œ

    • Kafka βœ…
    • RabbitMQ βœ…
    • NATS βœ…
    • Redis βœ…
    • MQTT βœ… NEW
    • AWS SNS/SQS βœ…
    • Azure Service Bus/Event Grid βœ…
    • Resilience patterns μ™„μ „ κ΅¬ν˜„
    • Production-ready ν’ˆμ§ˆ
  4. λ³΄μ•ˆ 및 λͺ¨λ‹ˆν„°λ§

    • λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬ μΆ”κ°€
    • λ©”νŠΈλ¦­ μˆ˜μ§‘ κΈ°λŠ₯
  5. ν…Œλ§ˆ 지원

버전 관리 (Versioning)

이 ν”„λ‘œμ νŠΈλŠ” Semantic Versioning을 λ”°λ¦…λ‹ˆλ‹€.

릴리즈 (Release)

λ¦΄λ¦¬μ¦ˆλŠ” GitHub의 νƒœκ·Έ 기반으둜 μžλ™ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

git tag v1.0.0
git push origin v1.0.0

νƒœκ·Έ ν‘Έμ‹œ μ‹œ GitHub Actionsκ°€ μžλ™μœΌλ‘œ:

  • λΉŒλ“œ 및 ν…ŒμŠ€νŠΈ μ‹€ν–‰
  • Shadow JAR 생성
  • GitHub Release 생성
  • JAR 파일 μ—…λ‘œλ“œ

λΌμ΄μ„ μŠ€ (License)

이 ν”„λ‘œμ νŠΈλŠ” Apache License 2.0으둜 λ°°ν¬λ©λ‹ˆλ‹€.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2025 ScriptonBasestar

κΈ°μ—¬ν•˜κΈ° (Contributing)

κΈ°μ—¬λ₯Ό ν™˜μ˜ν•©λ‹ˆλ‹€! Pull Requestλ₯Ό λ³΄λ‚΄μ£Όμ„Έμš”.

참고 자료 (References)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 2

  •  
  •