使用者授權
User-based Licensing
用可信任後端提供的 User UUID,驗證『哪一位被授權的人』正在使用軟體。
這個範例解決什麼問題
Machine-based licensing 回答『哪一台裝置』,User-based licensing 回答『哪一位被授權的人』。只有當你的公司已有可信登入系統與 User provisioning 流程時,才應使用最大 User。
適合使用的場景
- 同一位工程師可能在多台允許的設備上工作,但授權按人計算。
- 公司已有 SSO、會員系統或企業帳號後端,能把登入身分映射到受控的 User UUID。
- 你需要限制可關聯到 License 的實際人員數,而不是 Windows 本機帳號數。
為什麼採用這種設計
- Windows username、Email 或使用者自行輸入的字串都不具可信性,不能直接當成 user_id。
- User UUID 必須由可信後端建立、關聯 License,並在使用者完成登入後交給 Client。
- User 與 Machine 可以同時存在:一個限制人數,一個限制裝置數,解決不同的授權問題。
程式實際怎麼執行
同步驗證可信後端提供的 Keygen User UUID。SDK 不登入使用者、不建立 User,也不讀 Windows username。
SDK 自動完成
- 把 user_id 納入 ValidationScope。
- Server 檢查 User 關聯與上限。
你的程式必須負責
- 先完成 SSO/登入並保護 UUID。
- 切換或登出時更新驗證上下文。
呼叫時機/頻率
- 登入後與高價值操作前。
成功時應看到
- 已關聯 User 通過;未關聯或超限被拒絕。
失敗處理
- 不要退回使用 Email/username。
建議整合步驟
- 步驟 1
先完成企業登入或應用程式登入,從可信後端取得已驗證的 User UUID。
- 步驟 2
把 UUID 放入 ValidationScope(user_id=...),不要自行生成。
- 步驟 3
驗證結果失敗時,要求重新登入或聯絡授權管理員。
- 步驟 4
測試使用者未關聯、超過最大 User、License 撤銷與換人流程。
完整程式碼
公開範例使用 Placeholder,重點是理解資料流與 API 行為。正式 Gateway URL、Product UUID、Namespace 與 Public Key 請向授權管理員取得;可直接運行的完整範例由管理員在 Admin SDK 整合中心下載。
"""User ID must be a trusted Keygen User UUID supplied by your backend."""
from keygen_device_sdk import LicenseSDKError, ValidationScope
def validate_signed_in_user(client, keygen_user_uuid: str):
try:
scope = ValidationScope(user_id=keygen_user_uuid)
return client.validate_or_raise(scope=scope)
except LicenseSDKError as exc:
raise RuntimeError(f"User-based validation failed: {exc}") from exc
上線前至少測試
- 合法、未關聯、超限、登出與 UUID 竄改。
常見錯誤
- 不要使用 os.getlogin()、getpass.getuser() 或 Windows SID 直接代替 User UUID。
- 不要讓使用者從文字框自行輸入 UUID。
- 沒有後端 User provisioning 時,請不要設定最大 User。