## 核心特性
+ 提供统一组织信息管理,多维度建立对应关系,实现在一个平台对企业人员、组织架构、应用信息的高效统一管理。
+ 支持钉钉、飞书、企业微信等身份源集成能力,实现系统和企业OA平台数据联动,以用户为管理基点,结合入职、离职、调岗、兼职等人事事件,关联其相关应用权限变化而变化,保证应用访问权限的安全控制。
+ 支持多因素认证,行为验证码、社交认证,融合认证等机制,保证用户认证安全可靠。
+ 支持微信、钉钉、飞书QQ等社交认证集成,使企业具有快速纳入互联网化认证能力。
+ 支持 `SAML2`,`OAuth2`,`OIDC`,`CAS`,`JWT`,`表单代填`等认证协议及机制,实现单点登录功能,预配置大量 SaaS 应用及传统应用模板,开箱即用。
+ 完善的安全审计,详尽记录每一次用户行为,使每一步操作有据可循,实时记录企业信息安全状况,精准识别企业异常访问和潜在威胁的源头。
+ 提供标准`RESTAPI`、`SCIM2.0`接口轻松完成机构用户同步,提供`HTTP`、`MQ`事件通知,实现企业对于账号生命周期的精细化管理。
## 系统架构

## 功能描述
| 功能模块 | 功能项 | 功能描述 |
|------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 账户管理 | 组织与用户 | 组织与用户用于解决企业组织、用户等实体的管理问题。这些实体您可以直接在TOPIAM中进行维护,也可以通过配置身份源后,同步身份源的数据。 |
| | 用户组管理 | 用户组是用户的集合,将具有相同职能的用户添加到一起,即形成用户组。将权限授权到用户组后,用户组内的用户都将继承该权限,因此,用户组十分适合用于批量授权。 |
| | 身份源管理 | 支持企业以多种身份源途径同步用户和组织信息到系统,在高级配置中可以对导入的处理逻辑进行灵活配置 ,实现从多个数据源的汇聚为一个完整的用户目录,部分身份源还可以通过回调的方式支持实时同步。 |
| 认证管理 | 认证提供商 | 支持设置多种身份提供商,企业用户即可通过不同方式登录门户。系统默认的认证源为用户密码和短信快捷认证,您还可添加钉钉、微信、企业微信、QQ等作为认证源。 |
| 应用管理 | OIDC协议应用 | OIDC是OpenID Connect的简称,OIDC=(Identity, Authentication) + OAuth 2.0。它在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议。OIDC是一个协议族,提供很多的标准协议,包括Core核心协议和一些扩展协议。 |
| | JWT协议应用 | JWT(JSON Web Token)是在网络应用环境声明的一种基于 JSON 的开放标准。TOPIAM 使用 JWT 进行分布式站点的单点登录 (SSO)。JWT 单点登录基于非对称加密,由 TOPIAM 将用户状态和信息使用私钥加密,传递给应用后,应用使用公钥解密并进行验证。使用场景非常广泛,集成简单。 |
| | 表单代填应用 | 表单代填可以模拟用户在登录页输入用户名和密码,再通过表单提交的一种登录方式。应用的账号密码在 TOPIAM 中使用 AES256 加密算法本地加密存储。很多旧系统、不支持标准认证协议的系统或不支持改造的系统可以使用表单代填实现统一身份管理。表单中有图片验证码、CSRF token、动态参数的场景不适用。 |
| | 应用分组 | 应用分组管理是一种将多个应用程序或功能按照一定的逻辑或相关性进行组织和管理的方法。通过应用分组,可以更有效地管理大量应用程序,提供更好的用户体验。 |
| 行为审计 | 用户行为 | 审计日志记录了所有平台用户进行的关键操作,以对某次改变提供充分的溯源数据。 |
| | 管理员行为 | 审计日志记录了所有平台管理员进行的关键操作,以对某次改变提供充分的溯源数据。 |
| 安全设置 | 通用安全 | 支持通用安全配置,及安全防御策略。 |
| | 密码策略 | 系统全局安全配置、如密码策略、会话策略。 在密码策略中可以设置相应的密码复杂度、相应的锁定解锁策略,还可以设置是否允许与历史密码重复等高级策略。同时,可以通过开启弱密码字典库来检查密码的安全强度。 |
| | 系统管理员 | 系统管理员负责保证系统的安全性、稳定性和合规性。 |
| 系统设置 | 消息设置 | 消息服务设置包括邮件服务配置和短信服务配置。邮件服务配置是指将消息发送到指定的电子邮件地址,需要配置SMTP服务器地址、端口号、用户名、密码等信息。短信服务配置是指将消息以短信的形式发送到指定的手机号码,需要配置短信服务提供商的API接口地址、账号、密码等信息。 |
| | IP地理库 | 配置IP地理库根据访问者的IP地址迅速识别出其所在的地理位置。 |
| | 存储配置 | 支持配置云存储服务,如阿里云、腾讯云、MinIO等。 |
| 系统监控 | 会话管理 | 会话管理可以查看所有当前仍然有效的会话列表,并且可以强制注销某个用户的会话。注销后,该用户凭证即刻失效,之后的所有操作都需要重新认证。 |
## 技术架构
- **后端**:[Spring Boot](https://spring.io/projects/spring-boot/) 、[Spring Security](https://spring.io/projects/spring-security/)
- **前端**:[React.js](https://react.dev/) 、[Ant Design](https://ant.design)
- **中间件**:[MySQL](https://www.mysql.com/) 、[Redis](https://redis.io/)
- **基础设施**:[Docker](https://www.docker.com/)
## 安装部署
+ [一键部署](https://topiam.cn/docs/deployment/deployment-online/)
+ [宝塔部署](https://topiam.cn/docs/deployment/deployment-baota/)
+ [阿里云计算巢部署](https://topiam.cn/docs/deployment/deployment-alibaba-cloud-computenest/)
+ [更多方式](https://eiam.topiam.cn/docs/deployment/)
## 部署
### 准备工作:确保本地构建成功
在项目根目录执行完整构建(跳过测试)
```
./mvnw clean package -DskipTests -Dlicense.skip=true -Dformatter.skip=true
```
```
cd /Users/yhtx/Documents/jupyter/ai/topiam
# 1. 先清理并重新构建 Console 前端(验证前端兼容性)
cd eiam-console/src/main/console-fe
pnpm install --registry=https://registry.npmmirror.com
pnpm run build:dev
# 2. 全量 Maven 构建(跳过测试)
cd /Users/yhtx/Documents/jupyter/ai/topiam
./mvnw clean package -DskipTests -Dlicense.skip=true -Dformatter.skip=true -pl eiam-console -am
```
完整三模块本地构建验证
```
# 按依赖顺序构建
./mvnw clean install -DskipTests -Dlicense.skip=true -Dformatter.skip=true -pl eiam-console,eiam-portal,eiam-openapi -am
```
三个独立启动脚本:
脚本 服务 端口 说明
start-console.sh Console 管理后台 1898 含 -Pdev 前端热构建
start-portal.sh Portal 用户门户 1989 含 -Pdev 前端热构建
start-openapi.sh OpenAPI 开放接口 1988 纯后端,无 -Pdev
使用方法
开三个终端分别运行:
### 终端 1
`./start-console.sh`
### 终端 2
`./start-portal.sh`
### 终端 3
`./start-openapi.sh`
访问地址
服务 地址
Console http://localhost:1898
Portal http://localhost:1989
OpenAPI http://localhost:1988/doc.html
登录:admin / topiam.cn 123456
保留 start-remote.sh 作为统一入口(可选)
### 仍可用于检查连通性
`./start-remote.sh all`
现在有四个构建脚本:
脚本 用途
build-console.sh 仅构建 Console 镜像
build-portal.sh 仅构建 Portal 镜像
build-openapi.sh 仅构建 OpenAPI 镜像
build-images.sh 一次性构建三个(原脚本)
使用方法
### 单独构建某个模块(默认版本 1.1.0-dev,本地仓库)
```
./build-console.sh
./build-portal.sh
./build-openapi.sh
```
### 指定版本和仓库
```
./build-console.sh v1.2.0 registry.cn-hangzhou.aliyuncs.com/my-ns
./build-portal.sh v1.2.0 registry.cn-hangzhou.aliyuncs.com/my-ns
./build-openapi.sh v1.2.0 registry.cn-hangzhou.aliyuncs.com/my-ns
```
## 开发流程建议
### 1. 修改 Console 代码后
`./build-console.sh`
### 2. 修改 Portal 代码后
`./build-portal.sh`
### 3. 发布前全量构建
```
./build-images.sh v1.2.0 registry.cn-hangzhou.aliyuncs.com/my-ns
```
利用 Docker 层缓存,单模块构建通常只需 30-60 秒(只重新编译变更模块)。