本文最后更新于 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的详细步骤。
准备工作
- 安装Docker和Docker Compose
- 了解基本的网络和数据库概念
- 准备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管理控制台。
验证部署
- 访问
http://localhost:8080/admin/
- 使用配置的管理员凭据登录(用户名:admin,密码:admin)
- 成功登录后,您将看到Keycloak管理控制台
Keycloak与MySQL的连接配置
理解Keycloak数据库连接
Keycloak使用数据库存储用户、角色、客户端和配置信息。在生产环境中,MySQL是一个常见的选择。
使用Docker Compose时,通过环境变量配置数据库连接:
KC_DB
: 数据库类型(mysql, postgres等)KC_DB_URL
: JDBC连接URLKC_DB_USERNAME
: 数据库用户名KC_DB_PASSWORD
: 数据库密码
生产环境配置优化
对于生产环境,建议进行以下优化:
- 使用生产模式启动:将Keycloak命令从
start-dev
改为start
- 配置HTTPS:添加SSL证书和相关配置
- 调整JVM参数:根据服务器资源设置合适的内存限制
- 添加代理:在前面添加Nginx或其他反向代理
- 数据库优化:为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)
- 登录管理控制台
- 点击左上角"Master"旁边的下拉菜单
- 选择"创建领域"
- 输入名称(例如"my-application")并点击"创建"
创建客户端(Client)
- 在左侧菜单选择"客户端"
- 点击"创建客户端"
- 填写基本信息:
- 客户端ID:应用标识符
- 客户端协议:OpenID Connect
- 配置访问类型(公共/机密)和重定向URL
添加用户
- 在左侧菜单选择"用户"
- 点击"添加用户"
- 填写用户名和基本信息
- 在"凭证"选项卡中设置密码
配置身份提供商
如需集成社交登录或企业身份提供商:
- 在左侧菜单选择"身份提供商"
- 选择提供商类型(GitHub、Google等)
- 配置客户端ID和密钥
总结
本文介绍了Keycloak的基本概念和功能,并详细说明了如何使用Docker部署Keycloak并与MySQL集成。通过Docker Compose,我们可以快速搭建一个完整的身份认证环境,适用于开发和生产场景。
Keycloak强大的身份和访问管理功能使它成为企业应用安全的绝佳选择。通过正确配置和集成,Keycloak可以为您的应用提供现代、安全和用户友好的认证体验。