125 lines
3.3 KiB
Markdown
125 lines
3.3 KiB
Markdown
# Bastion SSO API
|
||
|
||
统一 SSO 登录系统后端(Laravel 11),用于团队内部集中管理堡垒机访问授权、服务器资源与访问审计。
|
||
|
||
## 主要模块
|
||
|
||
- 登录模块:基于 `tymon/jwt-auth` 生成 JWT。
|
||
- 用户及权限模块:基于 `spatie/laravel-permission` 实现角色与权限管理。
|
||
- 服务器资源模块:维护服务器 `asset_id/account_id/protocols` 等信息。
|
||
- 日志模块:记录用户访问服务器资源行为。
|
||
- 堡垒机授权账号模块:维护授权账号并定时刷新 `USM-AUTHENTICATION` 与 `USM`。
|
||
|
||
## 安装与启动
|
||
|
||
```bash
|
||
composer install
|
||
cp .env.example .env
|
||
php artisan key:generate
|
||
php artisan jwt:secret --force
|
||
```
|
||
|
||
按需将 `.env` 的数据库配置改为 MySQL:
|
||
|
||
```env
|
||
DB_CONNECTION=mysql
|
||
DB_HOST=127.0.0.1
|
||
DB_PORT=3306
|
||
DB_DATABASE=bastion_sso
|
||
DB_USERNAME=root
|
||
DB_PASSWORD=secret
|
||
```
|
||
|
||
然后执行:
|
||
|
||
```bash
|
||
php artisan migrate
|
||
php artisan serve
|
||
```
|
||
|
||
## RBAC 初始化(推荐)
|
||
|
||
首次部署建议初始化权限点和默认角色:
|
||
|
||
```bash
|
||
php artisan user:manage init-rbac
|
||
```
|
||
|
||
将某个用户设为管理员(拥有全部权限):
|
||
|
||
```bash
|
||
php artisan user:manage set-admin --email=admin@example.com
|
||
```
|
||
|
||
取消管理员:
|
||
|
||
```bash
|
||
php artisan user:manage unset-admin --email=admin@example.com
|
||
```
|
||
|
||
## 接口说明
|
||
|
||
- 认证:
|
||
- `POST /auth/login`
|
||
- `POST /auth/logout`
|
||
- `GET /auth/me`
|
||
- 用户:`/users`(GET/POST/GET{id}/PUT/DELETE)
|
||
- 用户权限同步:`PUT /users/{id}/permissions`
|
||
- 角色:`/roles`(GET/POST/GET{id}/PUT/DELETE)
|
||
- 角色权限同步:`PUT /roles/{id}/permissions`
|
||
- 权限:`/permissions`(GET/POST/GET{id}/PUT/DELETE)
|
||
- 服务器:`/servers`(GET/POST/GET{id}/PUT/DELETE)
|
||
- 日志:`/logs`(GET/POST)
|
||
- 授权账号:`/accounts`(GET/POST/GET{id}/PUT/DELETE)
|
||
|
||
控制器使用 `hg/apidoc` 注解声明,并启用了注解自动注册路由。
|
||
|
||
## 权限控制说明
|
||
|
||
- 所有管理接口均通过中间件 `auth:api` + `permission:*` 控制。
|
||
- 管理员角色:`admin`(guard: `api`)默认拥有所有平台权限。
|
||
- 平台权限粒度示例:
|
||
- `platform.users.view/manage`
|
||
- `platform.roles.view/manage`
|
||
- `platform.permissions.view/manage`
|
||
- `platform.servers.view/manage`
|
||
- `platform.accounts.view/manage`
|
||
- `platform.logs.view/manage`
|
||
- `resource.servers.use`
|
||
|
||
## 统一错误响应
|
||
|
||
- 未认证返回 `401`:
|
||
|
||
```json
|
||
{"code":401,"message":"未认证或登录已过期","data":null}
|
||
```
|
||
|
||
- 无权限返回 `403`:
|
||
|
||
```json
|
||
{"code":403,"message":"无权限执行此操作","data":null}
|
||
```
|
||
|
||
## 命令
|
||
|
||
- 刷新堡垒机 token:`php artisan bastion:refresh-tokens`
|
||
- 用户与权限管理:
|
||
|
||
```bash
|
||
php artisan user:manage {create|reset-password|list|init-rbac|create-role|assign-role|remove-role|assign-permission|remove-permission|grant-server|set-admin|unset-admin}
|
||
```
|
||
|
||
常见示例:
|
||
|
||
```bash
|
||
php artisan user:manage create --email=user@example.com --nickname=user --password=secret123
|
||
php artisan user:manage assign-role --email=user@example.com --role=operator
|
||
php artisan user:manage assign-permission --email=user@example.com --permission=platform.logs.view
|
||
php artisan user:manage grant-server --email=user@example.com --server-id=1 --ssh=1 --sftp=1 --rdp=0
|
||
```
|
||
|
||
## 定时任务
|
||
|
||
调度任务在 `routes/console.php` 中配置,每 10 分钟刷新一次堡垒机 token。
|