Security & Identity

Auth

Identity and access management — Keycloak with database, TLS, and routing.

Component:Auth

Examples

01

Simple Keycloak instance

import { Auth } from '@r8s/recipes'

export default <Auth name="auth" host="auth.example.com" />
02

Keycloak with custom storage and TLS

import { Auth } from '@r8s/recipes'

export default (
  <Auth
    name="auth"
    host="auth.example.com"
    instances={2}
    storage="20Gi"
    tls={{ secretName: 'auth-tls', clusterIssuer: 'letsencrypt-prod' }}
  />
)
03

Keycloak with realms and clients

import { Auth } from '@r8s/recipes'
import { Realms, Realm, Clients, Client } from '@r8s/recipes/auth'

export default (
  <Auth name="auth" host="auth.example.com">
    <Realms>
      <Realm id="company" displayName="Company">
        <Clients>
          <Client id="web" type="public" redirectUris={['https://app.example.com/*']} />
          <Client id="api" type="bearer-only" />
        </Clients>
      </Realm>
    </Realms>
  </Auth>
)
04

Keycloak with EntraID federation

import { Auth } from '@r8s/recipes'
import { Realms, Realm, Clients, Client, EntraID } from '@r8s/recipes/auth'

export default (
  <Auth name="auth" host="auth.example.com">
    <Realms>
      <Realm id="company" displayName="Company">
        <EntraID
          tenantId="your-tenant-id"
          clientId="your-client-id"
          clientSecret="${env:ENTRA_CLIENT_SECRET}"
        />
        <Clients>
          <Client id="web" type="public" redirectUris={['https://app.example.com/*']} />
        </Clients>
      </Realm>
    </Realms>
  </Auth>
)

Props

namestringRequired

Resource name

hoststringRequired

Public hostname for the identity provider (e.g., 'auth.example.com')

namespacestringOptional

Kubernetes namespace (defaults to 'default')

instancesnumberOptional

Number of Keycloak replicas (defaults to 1)

storagestringOptional

Database storage size (defaults to '10Gi')

tlsTLSConfigOptional

TLS certificate configuration

childrenunknownOptional

Child components (Realms)