← 返回项目中心

统一认证 SSO 接入指南

一套账号密码,全系统通用

一、架构原理

采用 共享 JWT 密钥 模式:SSO 中心签发 token,各子系统用同一密钥验证。

用户 → 任一系统登录 → SSO 中心验证 → 签发 JWT
                     → 子系统用共享密钥解密 → 识别用户

二、接入步骤

1. 配置共享密钥

# 在子系统的环境变量中配置 (与 auth 服务一致)
GUOBIAO_SSO_SECRET=336e41f2ade16f3e18926f2465e5571ecbcb3956aa8763091bbdfa61bed30e87

# 密钥来源: /etc/systemd/system/guobiao-auth.service

2. 验证 SSO token (Python 示例)

import os, jwt
from fastapi import Depends, HTTPException
from fastapi.security import HTTPBearer

security = HTTPBearer()
SSO_SECRET = os.getenv("GUOBIAO_SSO_SECRET", "")

def get_current_user(credentials=Depends(security)):
    # 尝试 SSO token
    try:
        payload = jwt.decode(credentials.credentials, SSO_SECRET, algorithms=["HS256"])
        if payload.get("iss") == "guobiao-sso":
            username = payload.get("username")
            user = db.query(User).filter(User.username == username).first()
            if user: return user
    except Exception:
        pass
    # 降级: 本地 JWT 验证
    ...

3. 登录接口优先走 SSO

POST http://127.0.0.1:8700/sso/login
Body: {"username": "xxx", "password": "xxx"}
返回: {"data": {"access_token": "JWT...", "user": {...}}}

SSO 登录成功后, 用返回的 access_token 作为子系统 token,
子系统 get_current_user 验证通过即视为已登录 (自动创建本地用户映射).

三、已接入系统

系统状态说明
HR/财务 (guobiao-platform)✅ 已接入前端 modules.js 已集成
工作手机 (work-phone)✅ 已接入login 优先走 SSO + token 验证
郭标表单 (guobiao-form)✅ 已接入app/index.html 已集成
智慧物业 (gansu-property)⏳ 待接入Java 认证需源码级改造 (验证码+租户体系)

四、SSO 中心接口

接口方法说明
/sso/loginPOST登录, 返回 access_token
/sso/registerPOST注册 (自动登录)
/sso/meGET当前用户信息 (含实名状态)
/sso/logoutPOST退出登录

五、注意事项

1. 共享密钥必须严格保密, 泄露后可伪造任意用户 token
2. 密钥可通过 /etc/systemd/system/guobiao-auth.service 查看
3. 子系统用户表需与 SSO username 一致 (自动映射或手动创建)
4. SSO 不可用时, 子系统自动降级为本地认证 (高可用)