用途
本技能用于 Keycloak 的日常管理工作,面向 keycloak-alpha 多租户 MERN 平台,采用 OAuth 2.0 授权码流程(Authorization Code Flow)。当需要搭建 Keycloak realm 与客户端、配置 OAuth 2.0 授权码流程、管理带自定义属性(org_id)的用户、部署自定义主题、排查认证问题、配置令牌有效期与会话管理时,可启用本技能。
主要能力
Keycloak Admin REST API 与认证
使用 admin-cli 客户端获取管理员访问令牌,并在后续请求中通过 Bearer 令牌调用管理接口。资料给出的获取令牌方式为向 master realm 的 token 端点发送密码授权请求,参数包括 username、password、grant_type=password、client_id=admin-cli。
常用端点包括:
- /admin/realms(GET):列出所有 realm
- /admin/realms/{realm}(POST):创建 realm
- /admin/realms/{realm}/clients(GET/POST):管理客户端
- /admin/realms/{realm}/users(GET/POST):管理用户
- /admin/realms/{realm}/roles(GET/POST):管理角色
- /admin/realms/{realm}/groups(GET/POST):管理分组
Realm 创建与配置
可通过 POST /admin/realms 创建 realm,配置项涵盖:enabled、displayName、sslRequired、registrationAllowed、loginWithEmailAllowed、duplicateEmailsAllowed、resetPasswordAllowed、editUsernameAllowed、暴力破解防护相关参数(bruteForceProtected、permanentLockout、maxFailureWaitSeconds、minimumQuickLoginWaitSeconds、waitIncrementSeconds、quickLoginCheckMilliSeconds、maxDeltaTimeSeconds、failureFactor)、签名算法(defaultSignatureAlgorithm)、刷新令牌策略(revokeRefreshToken、refreshTokenMaxReuse)以及各类令牌与会话有效期。资料同时给出 keycloak-alpha 中 realm-config.js 的 realmDefaults 配置示例。
OAuth 2.0 授权码流程的客户端配置
创建客户端时设置 protocol 为 openid-connect、publicClient 为 false、standardFlowEnabled 为 true、implicitFlowEnabled 与 directAccessGrantsEnabled 为 false,配置 redirectUris、webOrigins、attributes(pkce.code.challenge.method=S256)、defaultClientScopes(email、profile、roles、web-origins)与 optionalClientScopes(address、phone、offline_access)。资料还给出前端 keycloak.config.js 与 authConfig 示例,包含 flow、pkceMethod、responseType、scope、redirectUri、postLogoutRedirectUri、checkLoginIframe、onLoad、silentCheckSsoRedirectUri 等配置。客户端密钥可通过 client-secret 端点获取或重新生成。
带自定义属性的用户管理
创建用户时可设置 username、email、firstName、lastName、enabled、emailVerified、attributes(如 org_id、tenant_name)以及 credentials(密码及 temporary 标记)。资料给出 user.controller.js 中创建用户、获取管理员令牌、分配默认角色、发送验证邮件的示例流程,并说明可通过 q=org_id:org_acme 按属性查询用户。
角色与分组管理
可创建 realm 角色(如 org_admin、org_user),并通过 role-mappings/realm 端点将角色分配给用户;资料给出 role.service.js 中分配角色与查询用户角色的示例。可创建组织分组(如 org_acme,带 org_id、org_name 属性),并通过 PUT /users/{userId}/groups/{groupId} 将用户加入分组。
主题部署与按组织定制
资料给出主题目录结构(lobbi-base 与 org-acme,包含 login、account、email 及 resources 下的 css、img、js),theme.properties 示例(parent、import、styles、locales、logo.url),以及通过 docker cp 复制主题、docker restart 重启 Keycloak、通过 PUT /admin/realms/{realm} 设置 loginTheme、accountTheme、emailTheme 的步骤。还给出 theme-mapper.js 中按 orgId 映射主题的示例,以及通过 kc_theme 查询参数动态应用主题的方式。
令牌配置与会话管理
可更新 accessTokenLifespan、accessTokenLifespanForImplicitFlow、ssoSessionIdleTimeout、ssoSessionMaxLifespan、offlineSessionIdleTimeout、accessCodeLifespan、accessCodeLifespanUserAction 等参数。可通过 protocol-mappers/models 端点创建 oidc-usermodel-attribute-mapper,将 org_id 写入 id.token.claim、access.token.claim、userinfo.token.claim。资料给出 api-gateway 中基于 jwks-rsa 与 jsonwebtoken 的令牌校验示例,校验 audience、issuer、算法 RS256,并检查 org_id 声明是否存在。
使用方式
以 curl 调用 Keycloak Admin REST API 为主,先获取管理员令牌,再在请求头中携带 Bearer 令牌执行管理操作。资料同时提供 Node.js/Express 服务端代码示例(用户创建、角色分配、令牌校验)与前端配置示例。
适用场景
- 多租户平台的身份认证与授权管理
- OAuth 2.0 授权码流程与 PKCE 集成
- 组织级用户属性与角色、分组管理
- 按组织定制登录主题
- 令牌声明定制与校验
- 认证相关问题的排查(CORS、重定向 URI、自定义声明缺失)
限制
资料未提供该技能的收费、价格、平台支持范围、性能指标或效果保证等信息。具体部署环境、版本兼容性与生产配置要求暂未提供。