gitextract__3_pgkb2/ ├── .gitignore ├── LICENSE ├── README.md ├── ch13/ │ ├── simple-risk-based-authenticator/ │ │ ├── .mvn/ │ │ │ └── wrapper/ │ │ │ ├── MavenWrapperDownloader.java │ │ │ ├── maven-wrapper.jar │ │ │ └── maven-wrapper.properties │ │ ├── README.md │ │ ├── mvnw │ │ ├── mvnw.cmd │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── keycloak/ │ │ │ └── book/ │ │ │ └── ch13/ │ │ │ └── authentication/ │ │ │ ├── MySimpleRiskBasedAuthenticator.java │ │ │ └── MySimpleRiskBasedAuthenticatorFactory.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── services/ │ │ └── org.keycloak.authentication.AuthenticatorFactory │ └── themes/ │ └── mytheme/ │ ├── .mvn/ │ │ └── wrapper/ │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties │ ├── README.md │ ├── mvnw │ ├── mvnw.cmd │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── keycloak/ │ │ └── book/ │ │ └── ch13/ │ │ └── theme/ │ │ ├── MyThemeResourceProvider.java │ │ └── MyThemeSelectorProvider.java │ └── resources/ │ ├── META-INF/ │ │ ├── jboss-deployment-structure.xml │ │ ├── keycloak-themes.json │ │ └── services/ │ │ ├── org.keycloak.theme.ThemeResourceProviderFactory │ │ └── org.keycloak.theme.ThemeSelectorProviderFactory │ └── theme/ │ └── mytheme/ │ └── login/ │ ├── resources/ │ │ └── css/ │ │ └── signin.css │ └── theme.properties ├── ch2/ │ ├── backend/ │ │ ├── Dockerfile │ │ ├── app.js │ │ ├── keycloak.json │ │ └── package.json │ └── frontend/ │ ├── .mvn/ │ │ └── wrapper/ │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties │ ├── Dockerfile │ ├── app.js │ ├── index.html │ └── package.json ├── ch4/ │ ├── Dockerfile │ ├── app.js │ ├── client.js │ ├── index.html │ ├── package.json │ └── styles.css ├── ch5/ │ ├── backend/ │ │ ├── Dockerfile │ │ ├── app.js │ │ ├── keycloak.json │ │ └── package.json │ └── frontend/ │ ├── Dockerfile │ ├── app.js │ ├── client.js │ ├── index.html │ ├── package.json │ └── styles.css ├── ch6/ │ ├── app.js │ └── package.json ├── ch7/ │ ├── golang/ │ │ ├── go.mod │ │ ├── go.sum │ │ └── main.go │ ├── keycloak-js-adapter/ │ │ ├── app.js │ │ ├── index.html │ │ └── package.json │ ├── nodejs/ │ │ ├── backend/ │ │ │ ├── app.js │ │ │ ├── keycloak.json │ │ │ └── package.json │ │ └── frontend/ │ │ ├── app.js │ │ ├── index.html │ │ ├── keycloak.json │ │ └── package.json │ ├── python/ │ │ ├── backend/ │ │ │ ├── app.py │ │ │ └── oidc-config.json │ │ └── frontend/ │ │ ├── app.py │ │ └── oidc-config.json │ ├── quarkus/ │ │ ├── backend/ │ │ │ ├── .mvn/ │ │ │ │ └── wrapper/ │ │ │ │ ├── MavenWrapperDownloader.java │ │ │ │ ├── maven-wrapper.jar │ │ │ │ └── maven-wrapper.properties │ │ │ ├── mvnw │ │ │ ├── mvnw.cmd │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── keycloak/ │ │ │ │ └── GreetingResource.java │ │ │ └── resources/ │ │ │ ├── META-INF/ │ │ │ │ └── resources/ │ │ │ │ └── index.html │ │ │ └── application.properties │ │ └── frontend/ │ │ ├── .mvn/ │ │ │ └── wrapper/ │ │ │ ├── MavenWrapperDownloader.java │ │ │ ├── maven-wrapper.jar │ │ │ └── maven-wrapper.properties │ │ ├── mvnw │ │ ├── mvnw.cmd │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── keycloak/ │ │ │ └── GreetingResource.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── resources/ │ │ │ └── index.html │ │ └── application.properties │ ├── reverse-proxy/ │ │ ├── app/ │ │ │ ├── app.js │ │ │ └── package.json │ │ └── secure-proxy.conf │ └── springboot/ │ ├── backend/ │ │ ├── .mvn/ │ │ │ └── wrapper/ │ │ │ ├── MavenWrapperDownloader.java │ │ │ ├── maven-wrapper.jar │ │ │ └── maven-wrapper.properties │ │ ├── build.gradle │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── mvnw │ │ ├── mvnw.cmd │ │ ├── pom.xml │ │ ├── settings.gradle │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── keycloak/ │ │ │ └── springboot/ │ │ │ ├── Application.java │ │ │ ├── HelloController.java │ │ │ └── SecurityConfig.java │ │ └── resources/ │ │ └── application.yaml │ ├── backend-using-introspection/ │ │ ├── .mvn/ │ │ │ └── wrapper/ │ │ │ ├── maven-wrapper.jar │ │ │ └── maven-wrapper.properties │ │ ├── build.gradle │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── mvnw │ │ ├── mvnw.cmd │ │ ├── pom.xml │ │ ├── settings.gradle │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── keycloak/ │ │ │ └── springboot/ │ │ │ ├── Application.java │ │ │ ├── HelloController.java │ │ │ └── SecurityConfig.java │ │ └── resources/ │ │ └── application.yaml │ └── frontend/ │ ├── .mvn/ │ │ └── wrapper/ │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties │ ├── build.gradle │ ├── gradlew │ ├── gradlew.bat │ ├── mvnw │ ├── mvnw.cmd │ ├── pom.xml │ ├── settings.gradle │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── springboot/ │ │ ├── Application.java │ │ └── HelloController.java │ └── resources/ │ └── application.yaml └── ch9/ ├── configure-caches.cli ├── configure-database.cli ├── configure-hostname.cli ├── configure-https.cli ├── configure-proxy.cli ├── configure-session-affinity.cli ├── haproxy.cfg ├── haproxy.crt.pem ├── mykeycloak.crt ├── mykeycloak.key └── mykeycloak.keystore