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