模块 3 · 进门钥匙

JWT 与 X-Agent-Type:
两套门禁别混

JWT 证明「你是谁」;X-Agent-Type 证明「你正在敲哪扇窗」。本项目里有两套验法,混用会 401。

两条通道(背下来能少踩一半坑)

场景鉴权函数X-Agent-Type
对话 / 风控 RESTget_auth_context必须(customer/advisor/risk/analyst)
平台只读 / 问数get_platform_auth_context不要
模拟交易get_auth_context要;且角色需 risk_demo 或客户本人
真实 bug 已修: 风控台账 risk.ts 曾缺 X-Agent-Type: risk,JWT 正确也会 401。指挥 AI 接新 REST 时记得对照这条表。
CODE · 模块鉴权工厂(deps.py)模块鉴权工厂
agent_type = request.headers.get("X-Agent-Type")
if not agent_type:
    raise ApiError(401, "AUTH_401_MISSING_AGENT_TYPE")
assert_agent_access(auth, agent_type, ...)
白话

读请求头:你声明自己是 customer 还是 risk?

没声明 → 直接 401,连业务代码都进不去。

再查矩阵:STAFF-30001 能不能走 risk 线?客户 token 能不能走 advisor 线?

Demo 账号(本地登录页一键用)

CUST-9527客户
STAFF-10086理财师
STAFF-20001分析员
STAFF-30001风控 + risk_demo

改 宿主 JWT 签发/验签(jwt_service.py)宿主 JWT 签发/验签 里角色后,必须重新登录 才会拿到新 JWT。

客户「我的持仓」页调 /api/customers/.../holdings,要带 X-Agent-Type 吗?