Keycloak身份认证系统:Docker部署与MySQL集成指南

本文最后更新于 1 分钟前,文中所描述的信息可能已发生改变。

Keycloak是一个开源的身份和访问管理解决方案,提供单点登录(SSO)、身份联合和社交登录等功能。本文将详细介绍Keycloak的核心功能,以及如何使用Docker安装Keycloak并与MySQL数据库集成。

Keycloak简介

Keycloak是由Red Hat开发的开源身份和访问管理解决方案,为现代应用和服务提供了全面的安全功能:

主要功能

  • 单点登录(SSO):用户只需登录一次即可访问多个应用
  • 标准协议支持:OpenID Connect、OAuth 2.0、SAML 2.0
  • 身份代理:与LDAP、Active Directory等企业目录集成
  • 社交登录:支持GitHub、Google、Facebook等
  • 多因素认证:支持OTP、手机验证等
  • 自定义主题:可定制登录页面和用户界面
  • 用户联合:跨多个身份提供商管理用户
  • 细粒度授权:基于属性的访问控制策略

适用场景

  • 企业内部应用的统一认证
  • 微服务架构的身份验证
  • API安全防护
  • 遗留系统的现代化认证
  • 客户身份和访问管理(CIAM)

使用Docker部署Keycloak

Docker使Keycloak的部署变得简单高效。以下是使用Docker部署Keycloak并集成MySQL的详细步骤。

准备工作

  1. 安装Docker和Docker Compose
  2. 了解基本的网络和数据库概念
  3. 准备MySQL数据库(可选,也可以使用Docker部署)

创建Docker Compose文件

创建一个docker-compose.yml文件:

yaml
version: '3'

services:
  mysql:
    image: mysql:8.0
    container_name: keycloak-mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: keycloak
      MYSQL_USER: keycloak
      MYSQL_PASSWORD: keycloak
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
      interval: 5s
      timeout: 5s
      retries: 10

  keycloak:
    image: quay.io/keycloak/keycloak:22.0.1
    container_name: keycloak
    command: start-dev
    environment:
      KC_DB: mysql
      KC_DB_URL: jdbc:mysql://mysql:3306/keycloak
      KC_DB_USERNAME: keycloak
      KC_DB_PASSWORD: keycloak
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    ports:
      - "8080:8080"
    depends_on:
      mysql:
        condition: service_healthy

volumes:
  mysql_data:

启动容器

在包含docker-compose.yml文件的目录中运行:

bash
docker-compose up -d

这将启动MySQL和Keycloak容器。启动完成后,可以通过访问http://localhost:8080进入Keycloak管理控制台。

验证部署

  1. 访问http://localhost:8080/admin/
  2. 使用配置的管理员凭据登录(用户名:admin,密码:admin)
  3. 成功登录后,您将看到Keycloak管理控制台

Keycloak与MySQL的连接配置

理解Keycloak数据库连接

Keycloak使用数据库存储用户、角色、客户端和配置信息。在生产环境中,MySQL是一个常见的选择。

使用Docker Compose时,通过环境变量配置数据库连接:

  • KC_DB: 数据库类型(mysql, postgres等)
  • KC_DB_URL: JDBC连接URL
  • KC_DB_USERNAME: 数据库用户名
  • KC_DB_PASSWORD: 数据库密码

生产环境配置优化

对于生产环境,建议进行以下优化:

  1. 使用生产模式启动:将Keycloak命令从start-dev改为start
  2. 配置HTTPS:添加SSL证书和相关配置
  3. 调整JVM参数:根据服务器资源设置合适的内存限制
  4. 添加代理:在前面添加Nginx或其他反向代理
  5. 数据库优化:为MySQL配置合适的性能参数

修改后的生产环境配置示例:

yaml
version: '3'

services:
  mysql:
    image: mysql:8.0
    container_name: keycloak-mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: keycloak
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - keycloak-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
      interval: 10s
      timeout: 5s
      retries: 5

  keycloak:
    image: quay.io/keycloak/keycloak:22.0.1
    container_name: keycloak
    command: start
    environment:
      KC_DB: mysql
      KC_DB_URL: jdbc:mysql://mysql:3306/keycloak
      KC_DB_USERNAME: ${MYSQL_USER}
      KC_DB_PASSWORD: ${MYSQL_PASSWORD}
      KC_HOSTNAME: ${KEYCLOAK_HOSTNAME}
      KC_PROXY: edge
      KC_HTTP_RELATIVE_PATH: /auth
      KC_HTTPS_CERTIFICATE_FILE: /opt/keycloak/conf/cert.pem
      KC_HTTPS_CERTIFICATE_KEY_FILE: /opt/keycloak/conf/key.pem
    volumes:
      - ./certs:/opt/keycloak/conf
      - ./themes:/opt/keycloak/themes
    networks:
      - keycloak-network
    depends_on:
      mysql:
        condition: service_healthy
    restart: unless-stopped

  nginx:
    image: nginx:latest
    container_name: keycloak-nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/certs:/etc/nginx/certs
    networks:
      - keycloak-network
    depends_on:
      - keycloak
    restart: unless-stopped

networks:
  keycloak-network:

volumes:
  mysql_data:

Keycloak基本配置与使用

安装完成后,我们需要进行一些基本配置:

创建领域(Realm)

  1. 登录管理控制台
  2. 点击左上角"Master"旁边的下拉菜单
  3. 选择"创建领域"
  4. 输入名称(例如"my-application")并点击"创建"

创建客户端(Client)

  1. 在左侧菜单选择"客户端"
  2. 点击"创建客户端"
  3. 填写基本信息:
    • 客户端ID:应用标识符
    • 客户端协议:OpenID Connect
  4. 配置访问类型(公共/机密)和重定向URL

添加用户

  1. 在左侧菜单选择"用户"
  2. 点击"添加用户"
  3. 填写用户名和基本信息
  4. 在"凭证"选项卡中设置密码

配置身份提供商

如需集成社交登录或企业身份提供商:

  1. 在左侧菜单选择"身份提供商"
  2. 选择提供商类型(GitHub、Google等)
  3. 配置客户端ID和密钥

总结

本文介绍了Keycloak的基本概念和功能,并详细说明了如何使用Docker部署Keycloak并与MySQL集成。通过Docker Compose,我们可以快速搭建一个完整的身份认证环境,适用于开发和生产场景。

Keycloak强大的身份和访问管理功能使它成为企业应用安全的绝佳选择。通过正确配置和集成,Keycloak可以为您的应用提供现代、安全和用户友好的认证体验。

参考资源

原神5.5版本深渊配队攻略
Docker容器化应用部署完全指南