Keycloak

Keycloak

Tips

  • 授权服务
    • 访问控制方式
      • ABAC - Attribute-based access control - 基于属性
      • RBAC- Role-based access control - 基于角色
      • UBAC - User-based access control - 基于用户
      • CBAC - Context-based access control - 基于上下文
      • Rule-based access control - 基于规则
        • 可以使用 JavaScript
      • Time-based access control - 基于时间
      • 通过策略 SPI (Service Provider Interface) 自定义访问控制机制 (ACMs - access control mechanisms)
  • 通过 jgroups 实现集群
  • vault 支持 K8S secrets
    • 挂载到 $JBOSS_HOME/secrets

Docker

  • jboss/keycloak
  • /opt/jboss/keycloak/themes - 主题目录
  • /opt/jboss/keycloak/standalone/deployments - 自定义 provider 目录
  • /opt/jboss/startup-scripts - 启动运行脚本目录
EnvDefaultDescription
KEYCLOAK_USER
KEYCLOAK_PASSWORD
KEYCLOAK_USER_FILE
KEYCLOAK_PASSWORD_FILE
DB_VENDORh2,postgres,mysql,mariadb,oracle,mssql
默认自动检测
DB_ADDR
DB_PORT
DB_DATABASE
DB_SCHEMA
DB_USER
DB_USER_FILE
DB_PASSWORD
DB_PASSWORD_FILE
PROXY_ADDRESS_FORWARDINGfalse在代理之后需要接受反向代理参数
KEYCLOAK_FRONTEND_URL前端地址
KEYCLOAK_LOGLEVELINFOALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN
ROOT_LOGLEVELINFO
KEYCLOAK_STATISTICSdb,http/metrics 暴露的信息
KEYCLOAK_WELCOME_THEME
KEYCLOAK_DEFAULT_THEMEkeycloak
KEYCLOAK_IMPORT可指定一个 realm json 文件导入
# 默认启动使用 H2
# 映射出数据可重复启动不丢配置
docker run --rm -it \
-p 8080:8080 \
-e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin \
-v $PWD/keycloak:/opt/jboss/keycloak/standalone/data \
--name keycloak jboss/keycloak
docker run --rm -it --entrypoint bash \
-e -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin \
-v $PWD/.keycloak:/opt/jboss/.keycloak \
-v $PWD:/host -w /host \
--name keycloak jboss/keycloak
# 配置文件
# $HOME/.keycloak/kcadm.config
docker run --rm -it --entrypoint bash \
-v $PWD/.keycloak:/opt/jboss/.keycloak \
-v $PWD:/host -w /host \
--name keycloak jboss/keycloak
export PATH=/opt/jboss/keycloak/bin:$PATH
# master 授权
kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin
# 授权信息
kcadm.sh config credentials --server http://localhost:8080/auth --realm demo --user admin --client admin
# 创建域
kcadm.sh create realms -s realm=demorealm -s enabled=true -o
# 创建 Client
CID=$(kcadm.sh create clients -r demorealm -s clientId=my_client -s 'redirectUris=["http://localhost:8980/myapp/*"]' -i)
# 获取 oidc 连接信息
kcadm.sh get clients/$CID/installation/providers/keycloak-oidc-keycloak-json
# H2 Console
jar="./modules/system/layers/base/com/h2database/h2/main/h2-*.jar"
url="jdbc:h2:./standalone/data/keycloak;AUTO_SERVER=TRUE"
java -cp $jar org.h2.tools.Console -url "$url" -user sa -password sa

LDAP

group-ldap-mapper

  • 分组映射
  • 注意
    • 不能有同名组,会导致无法同步回 Keycloak
    • LDAP 无法识别同名组
选项翻译说明
LDAP Groups DN分组 DN例如 ou=groups,dc=wener,dc=me
Group Name LDAP AttributeLDAP 属性 -> 分组名字
Group Object Classes对象类groupOfNames groups
Preserve Group Inheritance保留层级如果不保留,则同步后都是顶级
如果保留,存在相同名字分组会导致同步异常
Ignore Missing Groups忽略缺少分组
Membership LDAP Attribute表示成员的 LDAP 属性例如 member
Membership Attribute Type成员属性类型DN UID
Membership User LDAP Attribute成员用户 LDAP 属性UID 模式则使用该字段表示,一般为 uid
LDAP Filter过滤条件
Mode模式LDAP_ONLY,IMPORT,READ_ONLY
User Groups Retrieve Strategy查询策略
Member-Of LDAP AttributememberOf 属性
Mapped Group Attributes映射属性例如 description,ou,o
Drop non-existing groups during sync同步删除不存在分组LDAP 到 Keycloak 时候