# 驗證{#authentication} 要與伺服器互動,CLI 需要使用 [bearer authentication](https://swagger.io/docs/specification/authentication/bearer-authentication/) 來驗證請求。CLI 支援以使用者、帳號或使用 OIDC 令牌進行驗證。 ## 身為使用者{#as-a-user} 在本機使用 CLI 時,我們建議您以使用者身份進行驗證。要以使用者身份驗證,您需要執行以下指令: ```bash tuist auth login ``` 該指令會帶您經過網頁式驗證流程。驗證完成後,CLI 會在`~/.config/tuist/credentials` 下儲存一個長效的刷新令牌和一個短效的存取令牌。該目錄中的每個檔案代表您驗證的網域,預設應為`tuist.dev.json` 。該目錄中儲存的資訊相當敏感,因此**請務必妥善保管** 。 CLI 在向伺服器提出要求時會自動查詢憑證。如果存取權限已過期,CLI 會使用刷新權限來取得新的存取權限。 ## OIDC 代幣{#oidc-tokens} 對於支援 OpenID Connect (OIDC) 的 CI 環境,Tuist 可以自動進行驗證,而不需要您管理長期保密資訊。在支援的 CI 環境中執行時,CLI 會自動偵測 OIDC 令牌提供者,並將 CI 提供的令牌交換為 Tuist 存取令牌。 ### 支援的 CI 提供者{#supported-ci-providers} - GitHub 動作 - CircleCI - Bitrise ### 設定 OIDC 驗證{#setting-up-oidc-authentication} 1. **將您的套件庫連接到 Tuist**: 按照 GitHub 整合指南,將您的 GitHub 套件庫連接到 Tuist 專案。 2. **執行 `tuist auth login`** :在您的 CI 工作流程中,在任何需要驗證的指令之前執行`tuist auth login` 。CLI 會自動偵測 CI 環境,並使用 OIDC 進行驗證。 請參閱 Continuous Integration 指南,以瞭解特定提供商的配置範例。 ### OIDC 令牌範圍{#oidc-token-scopes} OIDC 原始碼授權給`ci` scope group,可存取與儲存庫相連的所有專案。有關`ci` 範圍包括的詳細資訊,請參閱 [範圍群組](#scope-groups)。 > [!TIP] > **Security Benefits** > > OIDC 驗證比長期使用的權杖更安全,因為: > - 無須輪換或管理秘密 > - 代幣的有效期很短,而且只適用於個別工作流程的執行 > - 驗證與您的儲存庫身分掛鉤 ## 帳戶代幣{#account-tokens} 對於不支援 OIDC 的 CI 環境,或當您需要對權限進行精細控制時,您可以使用帳戶令牌。帳戶令牌可讓您精確指定令牌可以存取的範圍和專案。 ### 建立帳戶標記{#creating-an-account-token} ```bash tuist account tokens create my-account \ --scopes project:cache:read project:cache:write \ --name ci-cache-token \ --expires 1y ``` 指令接受下列選項: | 選項 | 說明 | | ------ | ----------------------------------------------------------- | | `-範圍` | 必填。以逗號分隔的範圍清單,以授予權標。 | | `--名稱` | 必須填寫。令牌的唯一識別碼(1-32 個字元,僅限字母、數字、連字符號及底線)。 | | `--到期` | 可選擇。令牌的到期時間。使用格式如`30d` (天)、`6m` (月),或`1y` (年)。如果未指定,令牌永不過期。 | | `--項目` | 限制令牌存取特定專案句柄。如果未指定,令牌可存取所有專案。 | ### 可用範圍{#available-scopes} | 範圍 | 說明 | | ------------------------ | --------------- | | `帳戶:成員:讀取` | 讀取帳戶成員 | | `account:members:write` | 管理帳戶成員 | | `帳號:註冊表:讀取` | 從 Swift 套件註冊表讀取 | | `account:registry:write` | 發佈至 Swift 套件註冊表 | | `專案:預覽:閱讀` | 下載預覽 | | `project:previews:write` | 上傳預覽 | | `project:admin:read` | 讀取專案設定 | | `project:admin:write` | 管理專案設定 | | `專案:快取:讀取` | 下載快取的二進位檔 | | `project:cache:write` | 上傳快取的二進位檔 | | `project:bundles:read` | 檢視束裝產品 | | `project:bundles:write` | 上傳束裝 | | `project:tests:read` | 讀取測試結果 | | `project:tests:write` | 上傳測試結果 | | `專案:建置:讀取` | 閱讀建立分析 | | `project:builds:write` | 上傳建立分析 | | `專案:執行:讀取` | 讀取指令執行 | | `project:runs:write` | 建立與更新指令執行 | ### 範圍群組{#scope-groups} 作用域群組提供了一種方便的方式,可以使用單一識別碼授予多個相關的作用域。當您使用作用域群組時,它會自動展開以包含它所包含的所有個別作用域。 | 範圍組 | 包含的鏡頭 | | ---- | ---------------------------------------------------------------------------------------------------------------------------------------- | | `ci` | `project:cache:write`,`project:previews:write`,`project:bundles:write`,`project:tests:write`,`project:builds:write`,`project:runs:write` | ### 持續整合 (CI){#continuous-integration-ci} 對於不支援 OIDC 的 CI 環境,您可以使用`ci` 範圍群組建立帳號令牌,以驗證您的 CI 工作流程: ```bash tuist account tokens create my-account --scopes ci --name ci ``` 這會建立一個具有典型 CI 作業 (快取、預覽、bundles、測試、建立和執行) 所需的所有權限的標記。在您的 CI 環境中,將產生的標記儲存為秘密,並設定為`TUIST_TOKEN` 環境變數。 ### 管理帳戶代幣{#managing-account-tokens} 列出帳戶的所有代幣: ```bash tuist account tokens list my-account ``` 以名稱撤銷權限: ```bash tuist account tokens revoke my-account ci-cache-token ``` ### 使用帳戶代幣{#using-account-tokens} 帳號代碼預期會定義為環境變數`TUIST_TOKEN` : ```bash export TUIST_TOKEN=your-account-token ``` > [!TIP] > **When To Use Account Tokens** > > 需要時使用帳戶代用幣: > - 在不支援 OIDC 的 CI 環境中進行驗證 > - 對於令牌可執行的操作進行細粒度控制 > - 可存取帳戶內多個專案的標記 > - 自動過期的限時代用幣