4dc3dcdfa3
- 会话逻辑下沉 patbond-user(新 /internal/sessions;auth_sessions 只存 SHA-256 摘要,刷新即轮换并链 token_family,重用撤销整个 family,退出仅撤当前会话,多设备并行) - patbond-auth 作薄入口签发 RS256 JWT(access 15m / refresh 30d 均为配置项;密钥经环境变量注入,仓库零密钥材料,测试密钥运行时生成);公开端点迁至 /api/v1,冻结契约字段零偏差,expiresAt 无时区遗留修复 - /internal/** 加 X-Internal-Token 服务间鉴权(无凭证 401);/api/v1/me 由 user 以公钥本地验签(40101/40102 新错误码) - 登录失败限制:按用户名 15 分钟窗口 5 次锁 15 分钟(423/42300,DB 原子计数,可配置) - 修复两处存量缺陷:ErrorDecoder 未注册进 Feign 子上下文、JDK HttpURLConnection 对流式 POST 的 401 读不到错误体(引入 feign-hc5)——真实调用中下游错误码此前一律折叠为 503 - 门禁:JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./mvnw clean test → BUILD SUCCESS,73 测试 0 失败(37→73),含同 JVM 双服务真实 HTTP E2E:注册→me→刷新→旧 refresh 重用被拒且 family 撤销→退出后 refresh 失效;Testcontainers postgres:18,无遗留容器 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
26 lines
1.1 KiB
Plaintext
26 lines
1.1 KiB
Plaintext
server:
|
||
port: ${PATBOND_AUTH_PORT:8081}
|
||
|
||
spring:
|
||
application:
|
||
name: patbond-auth
|
||
|
||
patbond:
|
||
user-service:
|
||
url: ${PATBOND_USER_SERVICE_URL:http://127.0.0.1:8082}
|
||
# /internal/** 服务间共享密钥,需与 patbond-user 配置同一值;生产环境必须
|
||
# 通过 PATBOND_INTERNAL_TOKEN 注入强随机值(如 `openssl rand -hex 32`)。
|
||
internal-token: ${PATBOND_INTERNAL_TOKEN:dev-only-internal-token}
|
||
jwt:
|
||
# RS256 私钥(PKCS#8),用于签发 access token;对应公钥配置给 patbond-user。
|
||
# 值可以是 PEM 文件路径,也可以是内联 PEM 内容(以 -----BEGIN 开头)。
|
||
# 生成密钥对(私钥绝不提交进仓库):
|
||
# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out jwt-private.pem
|
||
# openssl pkey -in jwt-private.pem -pubout -out jwt-public.pem
|
||
# 然后:export PATBOND_JWT_PRIVATE_KEY=/path/to/jwt-private.pem
|
||
# 未配置时服务启动失败(fail-fast)。
|
||
private-key: ${PATBOND_JWT_PRIVATE_KEY:}
|
||
# ADR-003:access token 15 分钟,可配置。
|
||
access-ttl: ${PATBOND_ACCESS_TTL:15m}
|
||
issuer: patbond-auth
|