Device License SDKPlatform 13.3.7 · SDK 3.1.0

維運

錯誤處理與排查

用錯誤代碼、連線事件與本機身分狀態快速定位問題,同時避免在支援過程洩漏 License Key 或 Token。

先分辨是哪一層失敗

Local

本機身分問題

例如 REGISTRATION_INVALID、TPM Key 不存在、Namespace 改變或 registration.json 損壞。

Network

DNS、TLS 或連線問題

例如 getaddrinfo failed、憑證驗證失敗、Timeout 或公司 Proxy 阻擋。

Gateway

公開授權 API 拒絕

例如輸入資料不完整、Challenge 過期、簽章 Proof 無效或 License 狀態不允許。

Policy

授權規則不符合

例如 License 過期、撤銷、Machine/User/Process 上限或缺少 Entitlement。

connection.log 應該怎麼看

Log 以事件描述流程,不應包含 License Key、Token 或私密金鑰。排查時先找最後一個成功事件,再確認下一個失敗事件的 endpoint、status code 與 error code。

event flow
client.ready
challenge.requested
http.response 200
gateway.signature_verified
tpm.proof_created
proof.submitted
validation.completed

流量防護狀態不是 License 結論

Gateway 為了保護 CPU、記憶體、資料庫與上游授權 API,可能在 License 驗證以前先回覆流量防護狀態。這些回應代表「目前不能處理這次請求」,不是 License 已過期、撤銷或無效;不要刪除 registration.json、重建 TPM Key 或要求使用者重新輸入 License Key。

HTTP/Code代表意義Client 正確處理
429/IP_BURST_LIMIT、IP_RATE_LIMIT、REGISTRATION_BURST_LIMIT、*_RATE_LIMIT、IP_CONCURRENCY、IP_TEMPORARILY_BLOCKED單一來源、特定 API 類別、同時請求或累進封鎖暫時超過門檻讀取 GatewayError.retry_after_seconds,對可安全重試的驗證/讀取操作等待後再試;禁止無延遲 for 迴圈。
503/GLOBAL_BURST_LIMIT、GLOBAL_RATE_LIMIT、GLOBAL_CONCURRENCY、EMERGENCY_TRAFFIC_MODE、PROTECTION_CONFIG_UNAVAILABLEGateway 全站容量自我保護、設定暫時不可讀,或 Effective Mode 已進入 Emergency採 bounded exponential backoff 並依產品策略 fail closed;不要把 503 顯示成 License invalid,也不要立即重新啟用裝置。
403/IP_DENIED來源 IP 或 CIDR 被管理規則拒絕停止自動重試,保留錯誤時間、來源網路與 code,聯絡管理員檢查 Denylist/Trusted Proxy。

429 的安全等待範例

python
import time



from keygen_device_sdk import GatewayError



def validate_with_bounded_retry(client, attempts: int = 3):

    for attempt in range(attempts):

        try:

            return client.validate_or_raise()

        except GatewayError as exc:

            if exc.status_code != 429 or attempt + 1 >= attempts:

                raise

            delay = min(60, max(1, exc.retry_after_seconds or (2 ** attempt)))

            time.sleep(delay)

    raise RuntimeError("unreachable")

retry_after_seconds 由 SDK 解析 HTTP Retry-After 與 Gateway JSON Detail。範例只示範可安全重驗的 validation;不要直接複製到會扣 Usage 或建立資源的操作。

常見狀況

症狀優先檢查建議處理
getaddrinfo failedGateway URL 與 DNS確認正式網域可解析、URL 不含 /device/v1。
Gateway signature invalidPublic Key / Key ID確認 Client 使用管理員提供的目前信任根。
HTTP 429GatewayError.code 與 retry_after_seconds等待指定秒數,限制重試次數;不要建立緊密重試迴圈。
HTTP 503GLOBAL_* 或 EMERGENCY_TRAFFIC_MODE退避並停止高價值功能;這不是 License 無效。
HTTP 403/IP_DENIED來源 IP、公司 NAT、Trusted Proxy 與 Denylist停止重試並聯絡管理員。
REGISTRATION_INVALIDNamespace、Product 與 registration.json先用 recover;必要時在確認後本機重置。
License invalid / revokedLicense 狀態與 Policy停止受保護功能並聯絡管理員,不要自行改本機資料規避。
TPM delete failedSDK 版本與 Key Name確認使用管理員提供的目前 SDK,並比對正確的 expected_key_name。

聯絡管理員前準備

  • SDK 版本與 Python 版本
  • 作業系統版本
  • 錯誤代碼與簡短 Detail
  • connection.log 最後 30 至 50 行的去敏感內容
  • 可重現步驟與發生時間
  • Product 名稱或內部案件編號,但不要寄送 License Key
下一步

把文件轉成可驗證的整合流程

先在測試 License 上完成首次註冊、後續驗證、撤銷與斷線測試,再將相同模式接入正式功能。

查看 Quickstart