새소식

Keycloak

keycloak docker inspection

  • -

jboss/keycloak

  • dockerfile : https://github.com/keycloak/keycloak-containers/tree/master
  • checked version : keycloak 12.0.4 (21-05-06)

 

module_name

version description
org.jboss.modules 1.10.2.Final Java class(module) loader
org.jboss.msc 1.4.12.Final MSC : Modular Service Container , lightweight dependency injection container for Java
org.jboss.threads 2.4.0.Final Java Thread pool
org.jboss.as (MSC service thread)   AS : Application Server ,
it equals to wildfly (https://github.com/jbossas/jboss-as)    
org.jboss.vfs (MSC service thread)   VFS : Virtual File System ,This provides a way to represent a deployment as a read-only hierarchical file system regardless of whether it is packaged or not and takes care of generating physical URLs for classloading and debugging.
org.wildfly.security (ServerService Thread Pool) Elytron version 1.13.1.Final Wildfly Elytron Security
- Wildfly server를 위한 보안 프레임워크    
- Keycloak OIDC Adapter의 기반 (Elytron HTTP API)    
- Authentication, Authorization, SSL/TLS, Secure Credential Storage    
org.jboss.as.patching (MSC service thread)   jboss.AS의 패치 배포 도구
org.xnio 3.8.2.Final Java NIO(New Input Output) 위에 구축된 저수준 I/O계층 (jboss)
jboss.as.clustering.infinispan   분산 캐시,키값 NoSQL Database (jboss)
jboss.as.clustering.jgroups 4.2.5 일대일/일대다 통신을 위한 라이브러리 (메세징, Java
wildfly.MicroProfile config SmallRye   서비스에 대한 정적/동적 속성 외부화/주입 기능
jboss.remoting 5.0.19.Final 네트워크를 통한 대칭/비대칭 통신용 범용 프레임워크 (호출, 단방향 메시징, 비동기 콜백 등)
jboss.as.naming   JNDI(Java Naming and Directory Inderface) 기반, 이름과 객체를 매핑하는 인터페이스를 Java socket/RMI 기반으로 구현
jboss.as.jaxrs 3.13.2.Final RESTEasy - RESTful webservice, java application을 빌드하는 데 도움이 되는 다양한 Framework 지원
wildfly.extension.io   XNIO의 worker와 buffer pools를 정의
jboss.as.txn   JBoss의 트랜잭션 관리 모듈
wildfly.MicroProfile.health.smallrye   smallrye의 health check 구현체 (노드의 상태 확인)
wildfly.MicroProfile.metrics.smallrye   application 내부의 메트릭 및 통계 수집
jboss.as.connector WildFly/IronJacamar 1.4.23.Final JCA Subsystem - 데이터베이스, 메세징 시스템 및 Application Server 외부의 기타 서버/시스템 등과 연결 // JCA : J2EE Connector Architecture
jboss.as.security Current PicketBox version=5.0.3.Final-redhat-00006 Jboss picketbox (authentication, authorization, audit, security mapping 지원하는 Java security framework)
wildfly.Undertow 2.2.2.Final Java webserver, NIO 기반, block/nonblock API 모두 제공 (Wildfly AS의 기본 웹서버)
jboss.as.mail   smtp server, imap server, pop3 server 등을 설정하는 메일서버
jboss.as.ejb3   EJB : Enterprise Java Beans , hibernate를 Java Persistence Engine으로 사용하여 EJB 사양의 점검 및 단순화
jboss.modcluster 1.4.1.Final Jboss와 apache 사이의 통신을 담당하는 플럭읜
wildfly AJP listener   AJP : Apache Jserv Protocol , application server로부터 webserver로 들어오는 request를 delegation하는 binary protocol
webserver -> application server Ping 기능 (Monitoring)    
Infinispan 'Corona Extra' 11.0.4.Final in memory data grid - java 객체에서 일반 텍스트에 이르기까지, 모든 유형의 데이터를 저장할 수 있는 key-value 데이터저장소
JBoss Marshalling   JDK의 serializing API의 문제를 해결하고, 호환되는 대체 직렬화 API
Hibernate Core 5.3.20.Final Java Persistence Framework, JPA의 Implementation
Hibernate Commons Annotations 5.0.5.Final Java Generics 유형 검색 지원, XML 파일을 통해 대체되는 Java 주석 지원
Hibernate Validator 6.0.21.Final 데이터 유효성 검사 지원

 

 

flows

  1. connect to database
    • DB_VENDOR : DB Provider environment variables
      • h2 (default, embeded)
      • postgres
      • mysql
      • mariadb
      • oracle
      • mssql
  2. batch process (최대 2회 실행) // 실행시간 대략 1000ms
    1. modules 실행
    2. msc 실행
    3. thereads 실행
    4. msc thread에서 jboss.AS 실행 (Keycloak 시작 - WildFly Core 포함)
    5. msc thread에서 jboss.vfs 실행
    6. msc thread의 jboss.AS에서 Elytron 시작
  3. keystore detection
    • patching 실행
    • /opt/jboss/keycloak/standalone/configuration/application.keystore
    • 없을 경우 자동으로 self-signed certificate for host
    • endswith : The batch executed successfully
  4. JBoss Bootstrap
    1. batch process 실행
    2. jboss.AS 실행
      1. jboss.AS의 server에서 socket-binding을 이용하여 http management service 생성
      2. msc thread에서 XNIO 실행
      3. jboss.AS의 server에서 infinispan subsystem 활성화
      4. jboss.AS의 server에서 jgroups subsystem 활성화
      5. jboss.AS의 server에서 WildFly MicroProfile Config subsystem 활성화
      6. msc thread에서 jboss.remoting 실행
      7. jboss.AS의 server에서 Naming subsystem 활성화
      8. jboss.AS의 server에서 RESTeasy 실행(jaxrs)
      9. jboss AS의 server에서 wildfly io를 통해 IO thread, task thread, number of available processors 감지
      10. jboss.AS의 server에서 WildFly MicroProfile health 활성화
      11. jboss.AS의 server에서 WildFly MicroProfile Metrics 활성화
      12. msc thread에서 jboss.connector (IronJacamar) 실행 (JCA Subsystem)
      13. jboss.AS의 server에서 Security subsystem 활성화
      14. msc thread에서 jboss PicketBox 실행 (security subsystem)
      15. msc thread에서 wildfly Undertow 실행
      16. msc thread에서 Naming Service 실행
    3. database connecting
      1. 기본 드라이버인 h2.Driver를 Deploy 후 JDBC의 Driver Service를 msc thread에서 실행
      2. 지정했고, 정확한 DB_VENDOR가 있다면 해당 Driver를 Deploy 후, JDBC의 Driver Service를 msc thread에서 실행
    4. wildfly undertow 구동
      1. server 시작 (default : default-server)
      2. Host 시작 (default : default-host)
      3. HTTP listener run (default : listening on 0.0.0.0:8080)
      4. AJP listener run (default : listening on 0.0.0.0:8009)
      5. mod_cluster 초기화
      6. mod_cluster run (default : listening to proxy advertisements on /224.0.1.105:23364)
      7. Bound jboss/datasources/ExampleDS, jboss/datasources/KeycloakDS
      8. FileSystemDeploymentService /opt/jboss/keycloak/standalone/deployments 시작
      9. keycloak-server.war deployment 시작
      10. HTTPS listener run (default : listening on 0.0.0.0:8443)
    5. infinispan container 구동
      1. infinispan container 실행
      2. infinispan persistence - user marshaller 실행 (JBoss Marshaller)
      3. infinispan cluster - JGroups에서 ejb channel 실행
      4. infinispan cluster - ejb channel으로 cluster view 수락
      5. infinispan cluster - ejb local address, physical address 반환
      6. start caching in clustered containers
        1. http-remoting-connector (from ejb container)
        2. work (from keycloak container)
        3. loginFailures (from keycloak container)
        4. actionTokens (from keycloak container)
        5. offlineSessions (from keycloak container)
        6. authenticationSessions (from keycloak container)
        7. clientSessions (from keycloak container)
        8. sessions (from keycloak container)
        9. offlineClientSessions (from keycloak container)
        10. relams (from keycloak container)
        11. keys (from keycloak container)
        12. users (from keycloak container)
        13. authorization (from keycloak container)
        14. realmRevisions (from keycloak container)
        15. userRevisions (from keycloak container)
        16. authorizationRevisions (from keycloak container)
    6. configuration
      1. standalone.xml 또는 domain.xml으로부터 config loading
    7. jpa Connection
      1. database schema 초기화 (changelog >> META-INF/jpa-changelog-master.xml)
      2. LogHelper 실행
      3. Hibernate Core 실행
      4. Hibernate Commons Annotations 실행
      5. DB_VENDOR에 따라 hibernate.dialect 사용
      6. Hibernate Validator 실행
    8. keycloak.service
      1. master realm 초기화
      2. master realm에 user 'admin' 추가
    9. RESTeasy Deploying
      1. Deploying class org.keycloak.services.resources.keycloakApplication
      2. Adding provider class
        1. org.keycloak.services.filters.keycloakSecurityHeadersFilter
        2. org.keycloak.services.error.keycloakErrorHandler
      3. Adding class resource
        1. org.keycloak.services.resources.ThemeResource
        2. org.keycloak.services.resources.JsResource
      4. Adding singleton resource
        1. org.keycloak.services.resources.RobotsResource
        2. org.keycloak.services.resources.RealmsResource
        3. org.keycloak.services.resources.WelcomeResource
        4. org.keycloak.services.resources.admin.AdminRoot
      5. Adding provider singleton
        1. org.keycloak.services.util.ObjectMapperResolver
    10. start server
      1. undertow에서 web context ('/auth')를 register
      2. Jboss AS에서 keycloak-server.war를 deploy
      3. Keycloak Server가 최종적으로 시작됨 // 실행시간 대략 18000ms
      4. Http management interface listening on [http://127.0.0.1:9990/management](http://127.0.0.1:9990/management)
      5. Admin console listening on [http://127.0.0.1:9990](http://127.0.0.1:9990)

 

'Keycloak' 카테고리의 다른 글

v11 vs v20.0.3 Dependency 차이 조사  (0) 2023.01.18
0. Keycloak 이란?  (0) 2021.05.03
Keycloak  (0) 2021.04.30
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.