背景
最近打算整一些服务,但是每个服务都有自己的登录方式。目前在某四字大厂上班,公司都是通过SSO来串联各个系统。大体评估了下,还是考虑基于开源的keycloak来把我这些服务的登录都串联起来。
keycloak配置&部署
keycloak当前大版本为26,使用的JDK版本为21。可以直接使用OpenJDK:https://jdk.java.net/archive/ 由于21已经是比较早的版本,因此要从archive这边才能下载到。
keycloak默认使用的是PG,不过不想重新搭建一个PG,因此还是使用mariaDB,需要提前创建好数据库以及授权对应的用户名及密码,后面配置需要写入。反向代理则使用nginx:
export JAVA=/opt/jdk/jdk-21.0.2/bin/java # 使用JDK 21 ./bin/kc.sh build --db=mariadb --spi-x509cert-lookup-provider=nginx # 执行一些build配置 ./bin/kc.sh show-config # 查看对应的配置
修改对应的一些配置项
db=mariadb db-username=keycloak db-password=xxxx # xxxx为对应的密码 # 设置数据库连接为 mariadb, keycloak为对应的数据库 db-url=jdbc:mariadb://localhost/keycloak # 设置证书 这里使用letsencrypt签发的证书 xxx.com 换为自己的域名 https-certificate-file=/etc/letsencrypt/live/xxx.com/fullchain.pem https-certificate-key-file=/etc/letsencrypt/live/xxx.com/privkey.pem proxy=reencrypt proxy-headers=xforwarded # 挂nginx后 设置下 header,nginx对应 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; hostname=https://xxx.xxx.com # 修改为自己SSO的域名 hostname-admin=https://adm-xxx.xxx.com # 对应管理控制面的域名 https-port=9091 # 如果不使用默认的端口 可以配置下https的端口号 # 开启文件日志及配置路径 log=file log-file=/opt/log/keycloak.log
改完后,可以使用./bin/kc.sh show-config
查看配置是否正确。
使用临时管理员创建启动并创建管理员账号:
./bin/kc.sh start --bootstrap-admin-username tmpadm --bootstrap-admin-password yourpass
跑完之后,登录对应的之前配置的域名,先使用临时管理员的账号及密码登录,并创建一个新的账号,新账号授予管理员权限,后续相关操作都走新的管理员账号来配置。
添加到systemd(keycloak.service):
[Unit] Description=Keycloak Application Server After=network.target [Service] Type=simple #User=ping #Restart=on-failure Restart=always RestartSec=5s KillSignal=SIGTERM KillMode=process SendSIGKILL=no SuccessExitStatus=143 # 设置JAVA的路径 Environment=JAVA=/opt/jdk/jdk-21.0.2/bin/java # 启动脚本 ExecStart=/opt/app/keycloak-26.0.6/bin/kc.sh start --optimized StandardOutput=null [Install] WantedBy=multi-user.target
设置启动项:
systemctl enable /opt/app/keycloak.service systemctl start keycloak.service
没什么大问题,上面这些跑完后,keycloak就跑起来了。
创建新的realm
可以把语言调整为中文
stirling pdf配置SSO
最近刚好要用到PDF工具,加上stirling-pdf的SSO配置其实很简单,所以用这个来做例子也合适一些。
首先先创建一个client(ID就叫pdf好了)
创建完成客户端后,我们用docker的形式来启动stirling-pdf
#!/bin/bash D=/opt/app/stirling-PDF docker run -d -p 172.17.0.1:9001:8080 \ --restart=always \ -v ${D}/trainingData:/usr/share/tessdata \ -v ${D}/configs:/configs \ -v ${D}/log:/logs \ -v ${D}/customFiles:/customFiles \ -e INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false \ -e LANGS=zh_CN.UTF-8 \ -e DOCKER_ENABLE_SECURITY=true \ -e SECURITY_ENABLELOGIN=true \ -e SECURITY_OAUTH2_ENABLED=true \ -e SECURITY_OAUTH2_AUTOCREATEUSER=true \ -e SECURITY_OAUTH2_PROVIDER="keycloak" \ -e SECURITY_OAUTH2_ISSUER="https://xxx.xxx.com/realms/myrealm" \ -e SECURITY_OAUTH2_CLIENTID="pdf" \ -e SECURITY_OAUTH2_CLIENTSECRET="CLIENTSECRET" \ --name stirling-pdf \ stirlingtools/stirling-pdf:latest
https://xxx.xxx.com/realms/myrealm 其中 xxx.xxx.com对应自己搭建的sso的域名,myrealm对应上面创建的新的realm。SECURITY_OAUTH2_CLIENTID上面已经固定是pdf了,创建完成client后,可以到Client Secret复制下对应的密码。这样stirling-pdf运行后,则开启了SSO的登录能力:
当然,前提还是需要在keycloak新创建的realm创建新的用户,如果对应用户可以成功登录。那么则说明对应配置已经成功配置了。
转载请注明: 转载自elkPi.com
本文链接地址: 使用keycloak SSO来串联相关的服务