Build Enterprise SSO Fast: Keycloak, SpringBoot, OAuth2 & JWT Guide
This article provides a comprehensive walkthrough of Single Sign‑On (SSO) concepts, common protocols, login flow diagrams, and multiple implementation options, then dives into step‑by‑step deployment of an enterprise‑grade SSO system using Keycloak with Docker or Kubernetes, including configuration, client setup, custom extensions, and practical code snippets.
What is SSO?
Single Sign‑On (SSO) is an authentication mechanism that lets a user log in once and obtain access to multiple trusted applications without re‑entering credentials, improving both security and user experience.
Key Benefits
User Experience : One credential set eliminates login fatigue.
Security : Centralized credential management reduces password‑leak risk.
Efficiency : Saves time by removing repeated logins.
Core Components
Identity Provider (IdP) : Authenticates users and issues identity assertions. Examples include Microsoft AD FS, Google, Facebook, Okta.
Service Provider (SP) : Consumes IdP assertions to grant access to protected resources. Examples include corporate email, CRM, Dropbox, Salesforce.
Common Protocols and Technologies
SAML – XML‑based standard for exchanging authentication data.
OAuth 2.0 – Delegated authorization without exposing passwords.
OpenID Connect (OIDC) – Authentication layer built on OAuth 2.0.
LDAP – Directory service for centralized user management.
Kerberos – Ticket‑based network authentication.
Typical SSO Login Flow
User requests a protected resource; the application redirects to the SSO service.
User authenticates at the SSO portal.
SSO validates credentials and redirects back with a token.
Application validates the token and creates/updates the user session.
Resource is finally served to the user.
Implementation Options
Commercial products : Okta, Azure AD, Ping Identity.
Open‑source platforms : Keycloak, Gluu Server, Shibboleth.
Custom development : Build SSO with SAML, OAuth2/OIDC, or JWT.
Existing identity stores : LDAP or Kerberos integration.
Fast Low‑Cost Deployment with Keycloak
Keycloak provides out‑of‑the‑box support for OIDC, SAML, LDAP integration, multi‑factor authentication, and high‑availability deployment on Docker or Kubernetes.
Installing Keycloak – Docker
docker run -p 8080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:25.0.1 start-devAccess the admin console at http://localhost:8080 (admin/admin).
Installing Keycloak – Kubernetes
Create a manifest that defines a Service, a Secret, and a Deployment. Example:
apiVersion: v1
kind: Service
metadata:
name: keycloak
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30008
selector:
app: keycloak
---
apiVersion: v1
kind: Secret
metadata:
name: keycloak-secret
type: Opaque
stringData:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: changeme
KC_DB: mysql
KC_DB_URL: jdbc:mysql://mysql-db-service.mysql:3306/keycloak?characterEncoding=UTF-8
KC_DB_USERNAME: root
KC_DB_PASSWORD: testpassword
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: keycloak
spec:
replicas: 2
selector:
matchLabels:
app: keycloak
template:
metadata:
labels:
app: keycloak
spec:
containers:
- name: keycloak
image: quay.io/keycloak/keycloak:25.0.1
args: ["--verbose", "start"]
envFrom:
- secretRef:
name: keycloak-secret
ports:
- containerPort: 8080Deploy with kubectl apply -f keycloak.yaml -n dev.
Configuring Keycloak
Create a new realm (e.g., eric-realm) to represent a tenant.
Add users (e.g., eric) and set initial passwords.
Define a client (e.g., eric-client) with Valid Redirect URIs set to http://* for testing.
Optionally add client scopes to share common mappers and roles.
Retrieve an access token:
curl -ks -X POST http://localhost:30008/realms/eric-realm/protocol/openid-connect/token \
-d grant_type=password \
-d client_id=eric-client \
-d username=eric \
-d password=password \
-d scope=openid \
-d client_secret=YOUR_CLIENT_SECRETThe response contains an access_token that downstream services can use for authentication.
Key Environment Variables (excerpt)
KC_HOSTNAME : test.keycloak.org
KC_HTTP_PORT : 8080
KC_HTTPS_PORT : 8443
KC_DB : mysql
KC_DB_URL : jdbc:mysql://mysql-db-service.mysql:3306/keycloak?characterEncoding=UTF-8
KC_DB_USERNAME : root
KC_DB_PASSWORD : testpassword
KEYCLOAK_ADMIN : admin
KEYCLOAK_ADMIN_PASSWORD : changeme
Custom Extensions
Front‑end UI customization to match corporate branding.
Bulk user import via the admin REST API or direct MySQL inserts.
Two‑factor authentication extensions (e.g., Keycloak 2FA SMS authenticator – https://github.com/dasniko/keycloak-2fa-sms-authenticator).
Advanced password‑policy configuration in the admin console.
Caveats
The out‑of‑the‑box demo is not suitable for production. For a secure deployment you should enable HTTPS, configure strong password policies, adjust token lifetimes, and consider the operational overhead of custom code extensions. Extending Keycloak requires familiarity with its codebase and rebuilding Docker images.
Eric Tech Circle
Backend team lead & architect with 10+ years experience, full‑stack engineer, sharing insights and solo development practice.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
