管理 Realm

Realm 是 Keycloak 中的主要隔离单元。每个 Realm 拥有独立的用户、客户端、角色和认证配置。Alauda Build of Keycloak 支持通过 Admin Console 和声明式的 KeycloakRealmImport CRD 来管理 Realm。

通过 CRD 导入 Realm

KeycloakRealmImport CRD 支持 GitOps 友好的声明式 Realm 管理。当您创建一个 KeycloakRealmImport 资源时,Operator 会触发一个导入 Job,将 Realm 配置加载到目标 Keycloak 实例中。

操作步骤

CLI
Web Console

创建一个 KeycloakRealmImport 资源:

apiVersion: k8s.keycloak.org/v2alpha1
kind: KeycloakRealmImport
metadata:
  name: my-realm-import
spec:
  keycloakCRName: example-kc
  realm:
    realm: my-realm
    enabled: true
    displayName: "My Application Realm"
    registrationAllowed: false
    loginWithEmailAllowed: true
    duplicateEmailsAllowed: false
    sslRequired: external
    accessTokenLifespan: 300
    clients:
      - clientId: my-app
        enabled: true
        publicClient: true
        redirectUris:
          - "https://my-app.example.com/*"
        webOrigins:
          - "https://my-app.example.com"

应用该清单:

kubectl apply -f realm-import.yaml -n <namespace>

检查导入状态:

kubectl get keycloakrealmimport my-realm-import -n <namespace> \
  -o jsonpath='{.status.conditions[?(@.type=="Done")].status}'

当输出为 True 时,表示 Realm 已成功导入。

使用占位符注入 Secret

spec.placeholders 字段允许您在导入时将 Secret 值注入 Realm 配置,避免在 CR 中硬编码凭据:

spec:
  keycloakCRName: example-kc
  placeholders:
    CLIENT_SECRET:
      secret:
        name: my-client-secret
        key: client-secret
  realm:
    clients:
      - clientId: my-app
        secret: $(CLIENT_SECRET)

通过 Admin Console 管理 Realm 设置

访问 Realm 设置

  1. 登录 Keycloak Admin Console。
  2. 从左上角下拉菜单选择目标 Realm。
  3. 点击左侧导航栏中的 Realm Settings

主要 Realm 设置

设置项说明
Display Name登录页面显示的可读名称
SSL Required控制何时需要 HTTPS。选项包括:noneexternal(推荐)、all
Login Settings控制用户自助注册、邮箱登录及邮箱唯一性校验
Token Settings配置访问令牌有效期、刷新令牌有效期及 SSO 会话超时
Email SettingsSMTP 服务器配置,用于发送验证和通知邮件
Themes自定义登录、账户、管理和邮件模板

配置令牌有效期

令牌有效期控制已签发令牌的有效时间。较短的有效期提升安全性,但需要更频繁地刷新令牌。

令牌类型默认值推荐值(生产环境)
访问令牌有效期300 秒60–300 秒
SSO 会话空闲超时1800 秒1800 秒
SSO 会话最大超时36000 秒36000 秒
刷新令牌有效期会话绑定会话绑定