BastionSSO/README.md

125 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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。