自建IDP实现多账号SSO
本方案指导企业客户完成多账号SSO的搭建和更新升级,通过一步一步的配置指导,为客户提供一个可在自己生产环境配置和升级最新版本多账号SSO的部署指导。
一、部署指导书
(一)背景
本文主要目的是指导企业客户完成多账号SSO的搭建和更新升级,通过一步一步的配置指导,为客户提供一个可在自己生产环境配置和升级最新版本多账号SSO的部署指导。
(二)架构图

(三)部署过程
1. 交付物
压缩包dreamweb.zip,解压后是dreamweb文件夹,1.3版本的目录结构为:
dreamweb
├── dreamweb.jar Jar包
├── version.txt 当前版本信息
├── config 配置相关文件夹
│ ├── application.properties 配置文件
│ └── ssocert 证书文件夹
│ ├── cert.txt 说明文档
│ ├── saml.crt *公钥
│ ├── saml.pem *私钥
│ └── saml.pkcs8 *pkcs8格式私钥
├── mysql 数据库相关文件夹
│ ├── create 创建数据库相关文件
│ │ ├── create_1.0.sql 创建1.0版本的数据库
│ │ ├── create_1.1.sql 创建1.1版本的数据库
│ │ ├── create_1.2.sql 创建1.2版本的数据库
│ │ └── create_1.3.sql 创建1.3版本的数据库
│ └── modify 更新数据库相关文件
│ ├── modify_1.1.sql 1.0版本更新至1.1版本
│ ├── modify_1.2.sql 1.1版本更新至1.2版本
│ └── modify_1.3.sql 1.2版本更新至1.3版本
├── logs *运行日志文件夹
│ └── dreamweb.log *最新的运行日志
├── start.sh 启动程序脚本
└── stop.sh 终止程序脚本
*其中密钥和日志需要后续生成。
2. 修改配置文件和证书文件
2.1 修改配置文件application.properties
若没有安装MySQL和Redis,可以先跳至3.MySQL和4.Redis;
打开文件dreamweb/config/application.properties,对MySQL和Redis的配置项进行修改:
|
MySQL配置 |
||
|
地址和端口 |
spring.datasource.url=jdbc:mysql://localhost:3306 |
|
|
用户名 |
spring.datasource.username=root |
|
|
密码 |
spring.datasource.password=password |
|
|
Redis配置 |
||
|
地址 |
spring.redis.host=localhost |
|
|
端口 |
spring.redis.port=6379 |
|
|
密码 |
spring.redis.password= |
|
2.2 生成自签名证书和私钥
进入文件夹dreamweb/config/ssocert
1) 生成自签名证书和私钥:
使用下列命令得到证书文件saml.crt,私钥文件saml.pem:
openssl req -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.pem
生成过程需要提供一些信息,参考下图:

2) 将私钥转换为java可以读取的格式
使用下列命令得到pkcs8格式私钥文件:
openssl pkcs8 -topk8 -inform PEM -outform DER -in saml.pem -out saml.pkcs8 -nocrypt

3) 生成后的目录结构
config
├── application.properties
└── ssocert
├── cert.txt
├── saml.crt
├── saml.pem
└── saml.pkcs8
3. MySQL
以Ubuntu 20.04系统和MySQL 8.0.25为例
3.1 安装MySQL
1) 使用下列命令安装MySQL:
sudo apt-get update
sudo apt-get install mysql-server mysql-client
账户默认为root,密码默认为空,建议按照5)手动修改密码;
2) 检查是否安装成功
使用命令mysql -V查看版本,若没有安装则会提醒安装:

3) 启动MySQL
使用命令service mysql restart
4) 登录MySQL
使用命令mysql -u root -p登录MySQL
提示输入密码,输入正确密码,即可进入
5) 修改MySQL密码(可选,建议不要使用默认密码)
- 使用命令
mysql -u root -p登录MySQL; - 使用命令
use mysql;切换到mysql数据库; - 使用下列命令修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
- 退出mysql,重新登录验证密码是否修改成功:

3.2 初始化数据库dreamweb
进入文件夹dreamweb/mysql/create
1) 使用命令mysql -u root -p登录MySQL
2) 创建数据库dreamweb
- 使用命令
show databases;查看已有数据库,若有dreamweb则跳至3); - 若没有则使用命令
create database dreamweb;创建数据库dreamweb; - 再次使用命令
show databases;查看已有数据库,发现已有dreamweb:

3) 执行初始化SQL文件
- 使用命令
use dreamweb;切换到数据库dreamweb(这一步不能遗漏,否则默认对数据库mysql进行操作); - 使用命令
source create_xxx.sql;创建特定版本的数据表;如查看version.txt的内容为1.3,则使用命令source create_1.3.sql;创建1.3版本的数据表; - 使用命令
show tables;查看dreamweb的数据表,输出如下:

4. Redis
1) 使用下列命令安装Redis
sudo apt-get update
sudo apt-get install redis-server
2) Redis配置
- 打开文件/etc/redis/redis.conf
将supervised no改为supervised systemd:

- 使用
sudo service redis restart命令重启redis - 使用命令
sudo systemctl status redis查看Redis的运行状态 - 输出如下表示成功:

3) 修改Redis密码(可选)
- 打开文件/etc/redis/redis.conf,
将# requirepass foobared改为requirepass 新密码:

- 使用命令
sudo service redis restart重启redis; - 使用命令
redis-cli -a 密码登录redis; - 使用命令
keys *查看密码是否修改成功,若密码输错则会提示(error) NOAUTH Authentication required.:
5. 启动应用服务
1) 启动程序与日志
- 进入文件夹dreamweb
- (需要Java环境JDK1.8)使用命令
bash start.sh启动程序,会跟踪日志输出,见到Started DreamwebApplication in 8.064 seconds (JVM running for 8.802)信息则启动成功(不同机器启动时间不同),此时可以使用Ctrl + C退出跟踪日志,如下图所示:

- 运行日志是dreamweb/log/dreamweb.log,有详细的日志信息;
2) 在浏览器输入地址访问dreamweb,进入登录页面
3) 使用管理员默认账号密码登录,值均为admin
可以在用户管理中选中admin,点击修改,可以修改密码
4) 若出错则查看运行日志
- 若出现jdbc Communications link failure或HikariPool Failed to validate connection mysql报错,则说明MySQL没有启动;
使用命令service mysql restart重启mysql;


- 若出现sql Access denied报错,则说明MySQL密码配置错误
- 查看dreamweb/config/application.properties里的mysql密码是否正确,若不正确,则修改;
- 使用命令
bash stop.sh停止程序,使用命令bash start.sh启动程序,查看最新的日志;

- 若出现Unable to connect to Redis报错,则说明Redis没有启动或密码配置错误;
- 查看dreamweb/config/application.properties里的redis密码是否正确,若不正确,则修改;
- 使用命令
service redis restart重启Redis; - 使用命令
bash stop.sh停止程序,使用命令bash start.sh启动程序,查看最新的日志;

6. 运维
6.1 日志
进入文件夹dreamweb/logs查看运行日志
最新的运行日志为dreamweb.log
其余有日期为后缀,每天一个运行日志
6.2 解决错误
a) 尝试使用命令bash stop.sh终止应用并使用命令bash start.sh启动应用
b) 尝试根据日志排查问题
c) 联系我们
(四)更新版本过程
1. 更新包
压缩包dreamweb_update.zip,解压后是dreamweb_update文件夹,1.3版本的目录结构为:
dreamweb_update
├── dreamweb.jar 新版本Jar包,放入dreamweb文件夹
├── mysql 数据库文件夹,放入dreamweb文件夹
│ └── modify 数据库更新SQL文件夹
│ ├── modify_1.1.sql 1.0版本更新至1.1版本
│ ├── modify_1.2.sql 1.1版本更新至1.2版本
│ └── modify_1.3.sql 1.2版本更新至1.3版本
└── version.txt 更新包版本信息,放入dreamweb文件夹
2. 更新数据库
对比老版本dreamweb下的version和更新包dreamweb_update下的version,执行相应的modify_xxx.sql;
比如从版本1.0更新到版本1.3,执行以下操作:
- 进入文件夹dreamweb/mysql/modify;
- 使用命令
mysql -u root -p登录数据库; - 使用命令
use dreamweb;切换到dreamweb数据库; - 使用下列命令更新dreamweb数据库:
source modify_1.1.sql;
source modify_1.2.sql;
source modify_1.3.sql;
3. 重启应用
使用下列命令重启应用
bash stop.sh
bash start.sh
(五)SSO手动配置
1. 下载元数据meta.xml
1) 登录dreamweb系统
2) 在浏览器地址栏输入<your_dreamweb_url>/sso/metaxml.do下载meta.xml
比如本地访问dreamweb系统的地址为localhost:8080,登录到dreamweb系统后,地址变成localhost:8080/index.html:

将此地址改为localhost:8080/sso/metaxml.do按回车即可下载元数据meta.xml

2.创建身份提供商IDP
1) 登录阿里云https://www.aliyun.com/
2) 点击控制台

3) 搜索栏搜索访问控制,点击访问控制:

4) SSO管理创建身份提供商IDP
点击SSO管理,点击创建身份提供商:

输入身份提供商名称,填写备注,上传在步骤1.下载的元数据:

点击确定,即可创建身份提供商IDP:

3. 新建RAM角色
点击RAM角色管理,点击创建RAM角色:

选择身份供应商,点击下一步:

输入角色名称,填写备注,选择在步骤2.中创建的身份提供商IDP:

点击完成,即可创建RAM角色:

4. 绑定角色到Dreamweb用户组
点击RAM角色管理,搜索在步骤3.中创建的RAM角色:

点击该角色(aliyuntest1),进入权限管理页面,复制ARN备用:

(此时可以为该角色添加一些权限)
点击信任策略管理,复制saml-provider备用:

切换到Dreamweb系统页面,点击用户组管理,选择一个用户组(如testgroup):

点击角色列表的增加按钮,为这个用户组(testgroup)添加角色,填入在步骤3.中创建的RAM角色名称;在角色值中填入刚刚复制的ARN和saml-provider,用英文逗号分隔开:

5. 使用Dreamweb登录到阿里云控制台
点击个人中心,角色列表中列出了与此账号关联的阿里云控制台:

点击登录控制台,即可跳转到阿里云控制台:

