logo
開發者文件
搜尋
07 · 常見問題與排錯

07 · 常見問題與排錯

錯誤碼總表

verifyWsa 拋的 WsaVerificationError.code

code 常見原因 怎麼排查
InvalidSignature 金鑰錯、令牌被竄改、Tier1/Tier2 用錯金鑰 確認後端用的金鑰與註冊/分發的一致;per-app 金鑰原樣字串傳入,不要 hex 解碼
WrongAudience audience 與令牌 aud 不一致 audience 必須精確等於註冊 URL 的 host(如 app.example.com),不含連接埠/協定
WrongIssuer issuer 設定被改 保持預設 gptbots-workspace
Expired 令牌超 5 分鐘、伺服器時鐘偏差 NTP 同步伺服器時鐘;wsa 是一次性引導令牌,別快取後再用
NotYetValid iat/nbf 在未來 通常是簽發方/校驗方時鐘嚴重不同步
MissingClaim exp/sub/role/workspace_id 正常平台令牌不會缺;出現說明令牌來源可疑
UnsupportedAlgorithm alg 不在白名單 預設僅 HS256;RS256 需顯式 algorithms:['RS256'] + publicKey
InvalidToken 令牌為空/結構非法/被截斷 檢查前端是否正確取到完整 wsa,URL 是否被中間層改寫

/token 換取階段(拉式)

code 含義 觸發條件
403209 Invalid grant code 缺失、過期或已被使用(重放)。code 只能用一次
403210 Invalid verifier PKCE codeVerifier 與發起時的 code_challenge 不匹配

推式 sign-token(由工作空間前端呼叫,了解即可)

code 含義 觸發條件
40000 Parameter error URL 不在冊、auth_mode 不是 workspace_account
40100 Permission deny 未登入或工作階段失效
40105 Require member of project 點擊人不是該工作空間的成員
40320 Member not found 帳號被登出/刪除

FAQ

Q:我該選推式還是拉式?
A:入口在工作空間「擴充」頁裡、想做「內嵌應用程式」→ 推式(最簡單)。若你的應用程式是獨立站點、想放「用 GPTBots 登入」按鈕 → 拉式(M-Auth,更安全,wsa 不進瀏覽器)。見 02

Q:能不能在前端直接解 JWT 拿使用者資訊?
A:可以解開看,但不能當可信身份——沒有金鑰無法驗簽,payload 可被偽造。任何授權判斷必須以後端 verifyWsa 結果為準。見 05 §5

Q:wsa 過期了怎麼辦?
A:wsa 只是一次性引導令牌(5 分鐘)。落地時驗一次、換成你自己的工作階段,之後都用你的工作階段,不要再依賴 wsa。使用者下次從擴充頁點開會拿到新的 wsa

Q:落地頁 consumeHandoff 拋「no handoff token present」?
A:說明目前 URL 沒有 ?wsa=——可能是使用者直接存取、或 wsa 已被上一次成功交換抹除。區分「首次帶令牌落地」與「普通存取」,後者走你自己的登入/匿名分支。

Q:拉式登入回呼報 StateMismatch / MissingRequest
A:MissingRequest = 沒先在同一瀏覽器工作階段呼叫 startWorkspaceLogin(PKCE verifier 存在 sessionStorage,換分頁/清了儲存就會丟)。StateMismatch = 回呼 state 與儲存的不一致(CSRF 保護),確認沒跨裝置/跨工作階段。

Q:拉式登入報 CryptoUnavailable
A:PKCE 需要 Web Crypto,只在安全上下文(HTTPS 或 localhost)可用。用 HTTPS 或本地 localhost 偵錯。

Q:redirect_uriinvalid_request / 回到組織選擇頁?
A:redirect_urischeme + host 必須與 client_id(註冊 URL)精確相同https 應用程式不能配 http 回呼;host 必須一致。平台絕不跳到未校驗位址,所以會回組織選擇頁帶 ?error=invalid_request

Q:per-app 金鑰怎麼當 HMAC key?要不要 base64/hex 解碼?
A:原樣字串傳入(SDK 與平台均按 UTF-8 位元組直接作 HMAC key)。Tier 2 金鑰形如 wext_+64 hex,整串就是金鑰,不要再解碼。

Q:CommonJS 專案能用 SDK 嗎?
A:SDK 是 ESM。CJS 專案用動態 import(),或把相關模組改為 ESM。

Q:圖示/名稱怎麼改?
A:Tier 2 在空間管理裡編輯;Tier 1 聯絡平台運維改字典條目。

Q:管理員停用了我的應用程式會怎樣?
A:組織管理員在空間管理裡可停用應用程式(含平台公共應用程式在本組織的可見性)。停用後該組織成員在擴充頁看不到入口,平台也不會再為該組織簽發 wsa(推式與拉式都拒絕)。

聯調清單

  • audience == 註冊 URL 的 host(最常見的 WrongAudience 來源)
  • 後端金鑰與註冊/分發一致,且只在後端
  • 伺服器時鐘 NTP 同步(Expired / NotYetValid 多因時鐘)
  • 落地後 history.replaceState 抹除 wsa / code
  • 換成自有工作階段,後續請求不透傳 wsa
  • 拉式:HTTPS/localhost 安全上下文;redirect_uriclient_id 同域
  • 多租戶按 workspace_id 隔離

參考