Commit 8d1884e3 by luoqi

docs: align service read authentication and isolate FridayAI TLS certificate

parent 568a456f
Pipeline #3714 failed in 0 seconds
......@@ -149,7 +149,7 @@ async function checkPac(
const hint: Record<typeof first.reason, string> = {
not_configured:
'ai-service 没配 PAC 读接入:在 .env 里填 AI_PAC_BASE_URL / AI_PAC_READ_SECRET',
auth: `PAC 没把宿主 ${input.partnerCode} 授权给我们:在 PAC 那边跑 pnpm pac:host grant-read ${input.partnerCode}(宿主名写错了也是这句)`,
auth: `PAC 读取鉴权失败:核对 PAC_READ_SECRET 与 AI_PAC_READ_SECRET 是否一致,以及宿主 ${input.partnerCode} 是否存在且启用`,
unreachable: 'PAC 连不上:看 AI_PAC_BASE_URL 对不对、PAC 起没起来',
error: 'PAC 回了错误',
};
......
# 测试机主机 Nginx;启用前先扩展共享证书,覆盖 fai.jarvismedical.asia。
# 测试机主机 Nginx;启用前先签发 fai.jarvismedical.asia 独立证书。
# ⛔ 不要修改 PAC 的 server;此文件独立启用且仅加载一份。
server {
listen 80;
......@@ -12,8 +12,8 @@ server {
listen [::]:443 ssl http2;
server_name fai.jarvismedical.asia;
ssl_certificate /etc/letsencrypt/live/tools.jarvismedical.asia/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tools.jarvismedical.asia/privkey.pem;
ssl_certificate /etc/letsencrypt/live/fai.jarvismedical.asia/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/fai.jarvismedical.asia/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
......
......@@ -132,18 +132,11 @@ curl -fsS http://127.0.0.1:3101/health | jq -e '.status == "ok"'
## 6. 首次配置 HTTPS
保留 PAC 共享证书的全部域名,追加 FridayAI:
为 FridayAI 签发独立证书,不改 PAC 现有共享证书:
```sh
AI_CERT=/etc/letsencrypt/live/tools.jarvismedical.asia/fullchain.pem
mapfile -t AI_CERT_DOMAINS < <(openssl x509 -in "$AI_CERT" -noout -ext subjectAltName | grep -oE 'DNS:[^, ]+' | cut -d: -f2)
[ "${#AI_CERT_DOMAINS[@]}" -gt 0 ]
AI_CERT_ARGS=()
for domain in "${AI_CERT_DOMAINS[@]}"; do AI_CERT_ARGS+=(-d "$domain"); done
if ! printf '%s\n' "${AI_CERT_DOMAINS[@]}" | grep -qx fai.jarvismedical.asia; then
certbot certonly --nginx --cert-name tools.jarvismedical.asia --expand "${AI_CERT_ARGS[@]}" -d fai.jarvismedical.asia
fi
openssl x509 -in "$AI_CERT" -noout -ext subjectAltName | grep -q 'DNS:fai.jarvismedical.asia'
certbot certonly --nginx --non-interactive --cert-name fai.jarvismedical.asia -d fai.jarvismedical.asia
openssl x509 -in /etc/letsencrypt/live/fai.jarvismedical.asia/fullchain.pem -noout -checkhost fai.jarvismedical.asia
install -m 644 deploy/nginx/friday-ai-test.conf /etc/nginx/sites-available/fai.jarvismedical.asia
ln -sfn /etc/nginx/sites-available/fai.jarvismedical.asia /etc/nginx/sites-enabled/fai.jarvismedical.asia
nginx -t
......
......@@ -21,7 +21,7 @@ export interface PacClientOptions {
/** PAC 服务根,如 `http://localhost:3101`。⚠️ 不带 `/pac/v1`,那是本客户端拼的 */
baseUrl: string;
/**
* **读方**的那一把只读钥匙(PAC 把它放在授权给读方的每个宿主的 `read_secrets` 上)。
* PAC 的服务级 `PAC_READ_SECRET`,兼容历史宿主 `read_secrets`。
* ⚠️ 只读,写不进 PAC。⭐ 读哪个宿主不在这里配 —— 每个请求自己带 `host`。
*/
readSecret: string;
......@@ -52,7 +52,7 @@ const PREFIX = '/pac/v1';
*
* ═══ ⚠️ 这一层守到哪 ═══════════════════════════════════════════════════════
*
* 授权是 **宿主级**的 ⇒ PAC 能强制的边界是 `host + tenant`。
* 服务级密钥用于系统间认证,PAC 仍按 `host + tenant` 读取。
* `orgScope` 是我们**自己声明**的,PAC 验不了越界。
* ⇒ 诊所/品牌级收窄是 **friday-ai 的责任**(由 ScopeService 算出来),
* 不是 PAC 给的保证。⛔ 别在别处手拼 orgScope。
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment