首页 自建IDP实现多账号SSO

自建IDP实现多账号SSO

更新时间: 2024-04-02 14:13:15

本方案指导企业客户完成多账号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.MySQL4.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密码(可选,建议不要使用默认密码)

    1. 使用命令mysql -u root -p登录MySQL;
    2. 使用命令use mysql;切换到mysql数据库;
    3. 使用下列命令修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
    1. 退出mysql,重新登录验证密码是否修改成功:

3.2 初始化数据库dreamweb

进入文件夹dreamweb/mysql/create

1) 使用命令mysql -u root -p登录MySQL

2) 创建数据库dreamweb

    1. 使用命令show databases;查看已有数据库,若有dreamweb则跳至3)
    2. 若没有则使用命令create database dreamweb;创建数据库dreamweb;
    3. 再次使用命令show databases;查看已有数据库,发现已有dreamweb:

3) 执行初始化SQL文件

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

4. Redis

1) 使用下列命令安装Redis

sudo apt-get update
sudo apt-get install redis-server

2) Redis配置

    1. 打开文件/etc/redis/redis.conf

将supervised no改为supervised systemd:

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

3) 修改Redis密码(可选)

    1. 打开文件/etc/redis/redis.conf,

将# requirepass foobared改为requirepass 新密码:

    1. 使用命令sudo service redis restart重启redis;
    2. 使用命令redis-cli -a 密码登录redis;
    3. 使用命令keys *查看密码是否修改成功,若密码输错则会提示(error) NOAUTH Authentication required.:

5. 启动应用服务

1) 启动程序与日志

    1. 进入文件夹dreamweb
    2. (需要Java环境JDK1.8)使用命令bash start.sh启动程序,会跟踪日志输出,见到Started DreamwebApplication in 8.064 seconds (JVM running for 8.802)信息则启动成功(不同机器启动时间不同),此时可以使用Ctrl + C退出跟踪日志,如下图所示:

    1. 运行日志是dreamweb/log/dreamweb.log,有详细的日志信息;

2) 在浏览器输入地址访问dreamweb,进入登录页面

3) 使用管理员默认账号密码登录,值均为admin

可以在用户管理中选中admin,点击修改,可以修改密码

4) 若出错则查看运行日志

    1. 若出现jdbc Communications link failure或HikariPool Failed to validate connection mysql报错,则说明MySQL没有启动;

使用命令service mysql restart重启mysql;

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

    1. 若出现Unable to connect to Redis报错,则说明Redis没有启动或密码配置错误;
      1. 查看dreamweb/config/application.properties里的redis密码是否正确,若不正确,则修改;
      2. 使用命令service redis restart重启Redis;
      3. 使用命令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,执行以下操作:

    1. 进入文件夹dreamweb/mysql/modify;
    2. 使用命令mysql -u root -p登录数据库;
    3. 使用命令use dreamweb;切换到dreamweb数据库;
    4. 使用下列命令更新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登录到阿里云控制台

点击个人中心,角色列表中列出了与此账号关联的阿里云控制台:

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