文章目录
- 同域下的单点登录原理
- 不同域下的单点登录原理
- 第三方 OAuth2 授权登录
- 支持第三方登录
- 本地用keycloak实现
- 1、生成证书
- 2、编写docker-compose.yml文件
- 3、创建持久化数据目录
- 4、接下来启动docker-compose
- 5、访问keycloak
单点登录英文全称Single Sign On,简称就是SSO。它的解释是:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。
如图所示,图中有4个系统,分别是Application1、Application2、Application3、和SSO。Application1、Application2、Application3没有登录模块,而SSO只有登录模块,没有其他的业务模块,当Application1、Application2、Application3需要登录时,将跳到SSO系统,SSO系统完成登录,其他的应用系统也就随之登录了。这完全符合我们对单点登录(SSO)的定义
同域下的单点登录原理
(原理略)
不同域下的单点登录原理
(原理略)
第三方 OAuth2 授权登录
第三方 OAuth2 授权登录,QQ、微信开放平台(Weixin)、微信公众平台(WeixinMP)、微博(Weibo)、淘宝(Taobao)、支付宝(Alipay)、钉钉(DingTalk)、飞书(Feishu)、码云(Gitee)、GitHub、微软(Microsoft )、StackOverflow、谷歌(Google)
支持第三方登录
三方 | 参考文档 | 应用申请(已登录) |
---|---|---|
参考文档 | 应用申请 | |
微信 | 参考文档 | 应用申请 |
微信公众平台 | 参考文档 | 应用申请 |
微博 | 参考文档 | 应用申请 |
淘宝 | 参考文档 | 应用申请 |
支付宝 | 参考文档 | 应用申请 |
钉钉 | 参考文档 | 应用申请 |
飞书 | 参考文档 | 应用申请 |
码云 | 参考文档 | 应用申请 |
Gitlab | 参考文档 | 应用申请 |
微软 | 参考文档 | 应用申请 |
GitHub | 参考文档 | 应用申请 |
谷歌 | 参考文档 | 应用申请 |
参考链接:https://gitee.com/netnr/Netnr.Login
本地用keycloak实现
1、生成证书
#生成https证书,我用的IP,也可以换成域名
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt -subj "/CN=10.10.0.8"
#修改证书权限,不然容器读取证书会有报错,服务起不来
chmod 644 server.key server.crt
2、编写docker-compose.yml文件
services:
# mysql容器
mysql:
container_name: mysql
image: mysql:8.0.39
command:
- mysqld
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
- --log_timestamps=SYSTEM
- --binlog_expire_logs_seconds=3600
- --innodb_buffer_pool_size=2G
- --max_connections=1000
- --lower_case_table_names=1
ports:
- 3306:3306
volumes:
- /etc/localtime:/etc/localtime:ro
- /data/keycloak/mysql/data:/var/lib/mysql
- /data/keycloak/mysql/conf:/etc/mysql/conf.d:rw
- /data/keycloak/mysql/logs:/var/log/mysql:rw
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: keycloak
TZ: Asia/Shanghai # 可选
# keycloak容器
keycloak:
container_name: keycloak
image: quay.io/keycloak/keycloak:25.0.6
depends_on:
- mysql
environment:
# 设置管理员账号密码
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
# 数据库配置
KC_DB: mysql
KC_DB_USERNAME: root
KC_DB_PASSWORD: 123456
KC_DB_URL: jdbc:mysql://10.10.0.8:3306/keycloak # 能连接到数据库的ip 例如公网ip
quarkus.transaction-manager.enable-recovery: true # 可选
ports:
- 8443:8443
security_opt:
- seccomp:unconfined # 可选
volumes:
- /data/keycloak/cert:/etc/x509/https
# 下面3行卷映射为可选配置
- /data/keycloak/conf/quarkus.properties:/opt/keycloak/conf/quarkus.properties
- /data/keycloak/themes:/opt/keycloak/themes
- /etc/localtime:/etc/localtime
privileged: true # 可选
command: start --hostname=10.10.0.8 --https-certificate-file=/etc/x509/https/server.crt --https-certificate-key-file=/etc/x509/https/server.key
3、创建持久化数据目录
mkdir -p /data/keycloak/mysql/{data,logs,conf}
mkdir -p /data/keycloak/{cert,conf,themes}
将证书复制到挂载的证书目录
cp -pr server.key server.crt /data/keycloak/cert/
4、接下来启动docker-compose
# 首次启动先拉取镜像
docker compose -f docker-compose.yml pull
# 启动命令
docker compose -f docker-compose.yml up -d
# 关闭命令
docker compose -f docker-compose.yml down
# 查看日志
docker compose -f docker-compose.yml logs
5、访问keycloak
启动好后稍等片刻,可通过ip或域名访问。
在上面的配置中,使用的是ip地址,端口使用的是8443。
访问https://xxx.xxx.xxx.xxx:8443
即可。
因为是自签名证书,提示不安全,忽略,点击继续访问。
访问成功,点击左侧的Administrator Console进行登录,输入刚才配置的账号和密码(admin)。
可以按图所示将界面改为中文。
到此,keycloak就安装成功了!🎉