SSO Portal
基于 Next.js 16 + Mantine 8 的 SSO Portal 登录服务,登录页复用 uirefbase 的 UI 风格。
📘 接入指南:INTEGRATION_GUIDE.md —— 面向其他前端应用的通用接入文档(OAuth2 授权码流程 / 环境变量 / 安全 / FAQ / 后端接口速查)。
快速开始
pnpm install
pnpm dev # http://localhost:5501
环境变量
按环境拆分,已随仓库提交(参考 uirefbase 约定):.env.development / .env.staging / .env.production。
本地私有覆盖请写入 .env*.local(已被 .gitignore 忽略,不入库)。
| 变量 | 说明 | 示例 |
|---|---|---|
NEXT_PUBLIC_BASE_PATH |
部署子路径,无则留空 | "" |
NEXT_PUBLIC_SHARED_API_PATH |
后端 basis 服务地址(登录 / 验证码 / 租户列表都走这里) | dev: http://172.16.115.31:6610/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)。
测试账号
| 账号 | 密码 | 姓名 |
|---|---|---|
admin |
123456 |
管理员 |
user01 |
123456 |
测试用户 |
zhangsan |
123456 |
张三 |
手机号登录:验证码由真实后端 /api/v1/basis/user/phone/code 发送,需使用后端真实账号对应的手机号(账号同理以真实后端数据为准)。
SSO 登录流程
1. 外部应用发起 SSO 请求
http://localhost:5501/login?app_id=your_app_id&app_url=http%3A%2F%2Flocalhost%3A3000%2Fcallback
2. 用户在此页面登录
3. 登录成功后自动跳转
http://localhost:3000/callback?sso_code=xxxxx
4. 外部应用用 code 换取 access_token
外部应用拿到 sso_code 后,由其服务端直接调真实后端换 token(sso-portal 不再提供 code 换信息接口):
curl -X POST http://172.16.115.31:6610/api/v1/basis/sso/access_token \
-H "Content-Type: application/json" \
-d '{
"client_id": "6wds5qua3b76hu748zrjmall",
"client_secret": "<服务端密钥>",
"code": "your_sso_code",
"grant_type": "authorization_code",
"tenant": "cowarobot"
}'
返回 access_token(及可选 refresh_token / user),外部应用据此建立会话。
直接访问
当前 sso-portal 为纯 SSO 透传模式:
/login必须带app_id/app_url参数,登录成功后回跳外部应用;不再支持无 SSO 参数的本地登录(缺参时后端登录接口会拒绝签发授权 code)。
API
| 接口 | 方法 | 说明 |
|---|---|---|
/api/login |
POST | 账号 / 手机登录,透传后端 /sso/* 返回授权 code |
/api/getVerifyCode |
POST | 发送手机验证码(透传 /api/v1/basis/user/phone/code) |
/api/front/getAbbrList |
GET | 租户简称列表 |
/api/mock/users |
GET | 测试用户列表 |
Description
Languages
TypeScript
77.9%
JavaScript
13.2%
Shell
7%
CSS
1.3%
Dockerfile
0.6%