chore(sso-portal): 整合近期重构、UX 改进、部署脚本与文档
项目改名 sso-mock → sso-portal: - 重命名仓库目录 sso-mock/ → sso-portal/ - package.json name 改 sso-portal - app/layout.tsx title/description 改 SSO Portal - 源码 [sso-mock] console.log 前缀、注释全部 → [sso-portal] - 文档(README、ADAPTATION_GUIDE)、env 同步 - 生产 svc 名 sso-mock-svc → sso-portal-svc(external-app 引用同步) SSO tenant 改环境变量驱动: - 新增 SSO_TENANT env(默认 cowarobot) - login/route.ts 顶部 const SSO_TENANT,ssoBody 显式使用 - callSsoApi 改回纯透传(不再硬编码覆盖 tenant) - external-app 同步用 SSO_TENANT,命名对齐 external-app 登录态改为基于 token: - page.tsx 读 token cookie 判定 authenticated(不再依赖 user cookie) - DashboardPage 用 authenticated 决定跳转,user 为 null 时优雅兜底展示 - 解决「200 后又跳回 SSO」bug(access_token 接口不返回 user) sso-portal 缺 SSO 参数体验优化: - 缺 app_id/app_url 时 Alert 提示 + 禁用所有输入和登录按钮 - components/login/index.tsx 加 missingSsoParams 检测 - Alert 样式两排完整显示 部署脚本(参考 uirefbase): - 新增 build.sh(git → pnpm install → build → docker build → tag → push) - 新增 .gitlab-ci.yml(main 分支触发 build.sh prod) - 新增 Dockerfile(standalone 模式,端口 5501) - package.json 加 env-cmd 依赖 + build:stage/build 脚本 - next.config.ts 保持 output: 'standalone' 代码清理: - 删除 utils/code-store.ts - 删除 app/api/auth/verify/(连同目录) - 移除旧的 codeStore / generateCode 逻辑 文档: - ADAPTATION_GUIDE.md:完整重写对齐真实后端三个 SSO 接口(/sso/account、/sso/phone/smscode、/sso/access_token) - 新增 INTEGRATION_GUIDE.md(从 external-app 迁移过来作为通用接入指南) - README.md 同步更新(sso-portal 仓库门面 + 文档索引) - external-app/README.md 加交叉链接指向 sso-portal 的接入文档
This commit is contained in:
32
README.md
32
README.md
@@ -1,6 +1,8 @@
|
||||
# Mock SSO
|
||||
# SSO Portal
|
||||
|
||||
基于 Next.js 16 + Mantine 8 的 Mock SSO 登录服务,登录页复用 uirefbase 的 UI 风格。
|
||||
基于 Next.js 16 + Mantine 8 的 SSO Portal 登录服务,登录页复用 uirefbase 的 UI 风格。
|
||||
|
||||
> 📘 **接入指南**:[INTEGRATION_GUIDE.md](./INTEGRATION_GUIDE.md) —— 面向其他前端应用的通用接入文档(OAuth2 授权码流程 / 环境变量 / 安全 / FAQ / 后端接口速查)。
|
||||
|
||||
## 快速开始
|
||||
|
||||
@@ -18,6 +20,7 @@ pnpm dev # http://localhost:5501
|
||||
|------|------|------|
|
||||
| `NEXT_PUBLIC_BASE_PATH` | 部署子路径,无则留空 | `""` |
|
||||
| `NEXT_PUBLIC_SHARED_API_PATH` | 后端 basis 服务地址(登录 / 验证码 / 租户列表都走这里) | dev: `http://172.16.115.31:6610/`<br>prod: `http://basis-app-svc:6610` |
|
||||
| `SSO_TENANT` | SSO 接口的租户标识(account / phone-smscode / access_token 共用) | `cowarobot` |
|
||||
|
||||
> 无密钥,可安全入库。Next.js 会按 `NODE_ENV` 自动加载对应文件(`next dev` → development,`next build/start` → production)。
|
||||
|
||||
@@ -30,7 +33,7 @@ pnpm dev # http://localhost:5501
|
||||
| `user01` | `123456` | 测试用户 |
|
||||
| `zhangsan` | `123456` | 张三 |
|
||||
|
||||
手机号登录:任意 11 位手机号 + 任意 6 位验证码即可。
|
||||
手机号登录:验证码由真实后端 `/api/v1/basis/user/phone/code` 发送,需使用后端真实账号对应的手机号(账号同理以真实后端数据为准)。
|
||||
|
||||
## SSO 登录流程
|
||||
|
||||
@@ -48,24 +51,33 @@ http://localhost:5501/login?app_id=your_app_id&app_url=http%3A%2F%2Flocalhost%3A
|
||||
http://localhost:3000/callback?sso_code=xxxxx
|
||||
```
|
||||
|
||||
### 4. 外部应用用 code 换取用户信息
|
||||
### 4. 外部应用用 code 换取 access_token
|
||||
|
||||
外部应用拿到 `sso_code` 后,由其**服务端**直接调真实后端换 token(sso-portal 不再提供 code 换信息接口):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:5501/api/auth/verify \
|
||||
curl -X POST http://172.16.115.31:6610/api/v1/basis/sso/access_token \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"code": "your_sso_code"}'
|
||||
-d '{
|
||||
"client_id": "6wds5qua3b76hu748zrjmall",
|
||||
"client_secret": "<服务端密钥>",
|
||||
"code": "your_sso_code",
|
||||
"grant_type": "authorization_code",
|
||||
"tenant": "cowarobot"
|
||||
}'
|
||||
```
|
||||
|
||||
返回用户信息和 token。
|
||||
返回 `access_token`(及可选 `refresh_token` / `user`),外部应用据此建立会话。
|
||||
|
||||
## 直接访问
|
||||
|
||||
不带 `app_id` / `app_url` 参数访问 `/login`,登录成功后跳转到 `/dashboard` 管理后台。
|
||||
> 当前 sso-portal 为纯 SSO 透传模式:`/login` 必须带 `app_id` / `app_url` 参数,登录成功后回跳外部应用;不再支持无 SSO 参数的本地登录(缺参时后端登录接口会拒绝签发授权 code)。
|
||||
|
||||
## API
|
||||
|
||||
| 接口 | 方法 | 说明 |
|
||||
|------|------|------|
|
||||
| `/api/auth/login` | POST | 登录(返回 code 或 token) |
|
||||
| `/api/auth/verify` | POST | 验证 code 换取用户信息 |
|
||||
| `/api/login` | POST | 账号 / 手机登录,透传后端 `/sso/*` 返回授权 code |
|
||||
| `/api/getVerifyCode` | POST | 发送手机验证码(透传 `/api/v1/basis/user/phone/code`) |
|
||||
| `/api/front/getAbbrList` | GET | 租户简称列表 |
|
||||
| `/api/mock/users` | GET | 测试用户列表 |
|
||||
|
||||
Reference in New Issue
Block a user