企業資料 × AI AGENT

先確認,你是誰。

使用 Keycloak 確認身分,再讓後端向 OpenBao 取得短效資料庫憑證。從查到訂單,到憑證撤銷、連線中止,每一步都有實際驗證結果。

正在確認登入狀態

我的登入身分

Keycloak 登入/更新登入
讀取中…

畫面只顯示驗證後的身分欄位,不顯示密碼或 Token。實驗頁工作階段最長 5 分鐘;到期後點選登入,Keycloak 的有效 SSO 工作階段可免重新輸入密碼。

做三個身分實驗

  1. 使用 sales.a、sales.b 或 hr.a 登入,比較使用者識別碼與部門。
  2. 測試講師限定端點:一般使用者應得到 403,teacher 應得到 200。
  3. 進入 Grafana,選擇 Keycloak SSO,確認同一身分不需要再次輸入密碼。
尚未測試
以 SSO 進入 Grafana

SSO 使用者在 Grafana 都是 Viewer。現有報表包含核准的跨部門摘要,不代表已套用每位學員的訂單權限。Grafana 工作階段獨立,離開共用電腦前也請在 Grafana 登出。

LAB 02 · OPENBAO

借用憑證,查詢,再收回

用業務或講師身分,查詢截至 2026-10-20 逾期且未完全出貨的前 10 筆訂單。後端領取兩分鐘有效的帳號,完成查詢後立刻撤銷,並檢查舊連線與重新登入是否都被拒絕。

尚未執行。人資帳號會被拒絕;這是業務查詢實驗。

結果會顯示實際 SQL、訂單與客戶、剩餘數量、憑證期限及撤銷檢查,不包含密碼或 Token。

資料範圍由 PostgreSQL 欄位權限與 RLS 限制為台灣市場。兩位業務目前共用此業務範圍,尚未實作逐客戶、逐學員授權。這一課使用受控 SQL;不是任意 SQL 執行入口。

LAB 03 · CODEX + MCP

用自己的 Codex,詢問訂單

先連上 Tailscale,再在自己電腦的 Codex 設定中加入下列 MCP。首次連線以 Keycloak 個人帳號登入,授權 orders:read。網頁登入與 Codex 授權是兩個工作階段。

在 ~/.codex/config.toml 新增以下區塊;已有同名設定時請編輯原區塊,不要重複貼上。

[mcp_servers.textile-orders]
url = "https://claude-lab.tail747e9c.ts.net:28100/textile/mcp"

[mcp_servers.textile-orders.oauth]
client_id = "textile-codex"
callback_url = "http://127.0.0.1/callback"

再於終端機登入:

codex mcp login textile-orders --scopes orders:read

開啟載入此設定的 Codex 對話,試著問:

請使用 textile-orders:
先確認我的身分與資料定義,再查截至 2026-10-20
逾期且未完全出貨的前 10 筆訂單,
列出客戶、剩餘未出貨公尺數、實際 SQL 與撤銷結果。

也可以追問「只看客戶 33,按剩餘數量由大到小,列出 3 筆」。後端會產生參數化 SQL,仍須通過權限與 RLS;不接受任意 SQL 或客戶端指定使用者身分。資料皆為虛構,訂單狀態是目前狀態,非歷史快照。此版本尚無逐人資料隔離或累計匯出預算。

Keycloak 驗證使用者 → 後端確認業務角色 → AppRole 驗證服務 → OpenBao 發放憑證 → PostgreSQL 唯讀查詢與 RLS → 撤銷租約 → 驗證既有連線中止、新登入失敗
密碼只留在後端記憶體。pgAdmin 仍是獨立的講師管理入口;OpenFGA 尚未接入。