認證
Copilot SDK 支援多種認證方式。請依用途選擇。認證方式
關於 BYOK 請參考 Custom providers。
Microsoft Entra ID
若要使用內建的 Microsoft Entra 登入與 token 更新,請向 client 註冊您的主機應用程式。將clientId 設為 Entra 應用程式註冊的應用程式(用戶端)ID。可傳入 EntraAuthConfig 實例或陣列。空值或僅含空白的值會拋出 InvalidArgumentException。
server.connect 交握時將 client ID 傳送給 runtime。此註冊與明確請求 token 的 accounts.acquireEntraToken 伺服器 RPC 是分開的。若已設定 Entra 設定但 runtime 版本過舊而不支援 connect,SDK 會拋出 This runtime does not support Entra client configuration.,而不會默默忽略該設定。此時請更新 runtime。其他認證方式仍可繼續使用。
網路回呼
透過network 設定,可以將執行階段的代理解析與 Kerberos Negotiate 驗證委派給主機端的回呼。所使用的 Copilot 執行階段必須支援 network.setProvider RPC。若不支援,用戶端啟動時會拋出提示更新執行階段的例外。回呼會接收請求型別,以及可用來檢查取消狀態的 CancellationToken。
resolveProxy 會回傳 PROXY proxy.example:8080; DIRECT 這類 PAC 格式的字串,或表示直接連線的 DIRECT。回傳 null 時由執行階段自行解析代理。authenticateNegotiate 會回傳不含 Negotiate 前綴的一次性 base64 SPNEGO 權杖,沒有憑證時回傳 null。若回呼拋出例外,RPC 會失敗,且不會退回直接連線。請在核發憑證之前驗證 SPN。
scope 省略時為 connection。connection 僅涵蓋此用戶端建立或恢復之工作階段的請求。runtime 也會涵蓋共用的背景通訊,但同一時間只能有一個連線持有此 scope。
GitHub 登入(CLI)
若copilot 或 gh CLI 已登入,且未指定其他選項,將使用已儲存的認證資訊。
OAuth GitHub App / PAT
將透過 OAuth 流程取得的使用者 access token 或 Fine-grained PAT 傳入github_token。
- 預期為
gho_/ghu_/github_pat_ - 不建議使用
ghp_(Classic PAT)
github_token 時 use_logged_in_user 會自動變為 false。若想明確切換,可如下設定。
github_token 與 use_logged_in_user 僅於 stdio 模式可用。TCP 模式下需在 Copilot CLI 端已完成認證。
遮蔽主機產生的機密資訊
若主機應用程式會動態取得 token(例如透過 MCP OAuth),請將其註冊到 Copilot CLI 的遮蔽過濾器。CLI 會在 session 記錄與匯出內容中遮蔽已註冊的值。onMcpAuthRequest 取得並傳遞 token 是分開的。請在取得 token 後明確呼叫。SDK 不會保存這些值,也不會為此 RPC 另外記錄它們。
環境變數
透過環境變數傳遞 token 時,CLI 會自動偵測。優先順序由上而下:COPILOT_GITHUB_TOKENGH_TOKENGITHUB_TOKEN
認證的優先順序
SDK 會依下列順序解析認證資訊。github_token(明確指定)- 環境變數 token(
COPILOT_GITHUB_TOKEN→GH_TOKEN→GITHUB_TOKEN) - CLI 中已儲存的 OAuth 認證資訊
ghCLI 的認證資訊
停用自動登入
若不希望使用已儲存的認證資訊,可將use_logged_in_user 設為 false。
設為 false 後,認證時僅使用明確指定的權杖(github_token),環境變數權杖(COPILOT_GITHUB_TOKEN、GH_TOKEN、GITHUB_TOKEN)會被忽略。
github_token 相同,僅支援 stdio 模式。TCP 模式下需在 Copilot CLI 端已完成認證。
確認認證狀態
可透過取得auth.getStatus 的結果來確認。
為互動式登入選擇帳戶
透過 session RPC 列舉loginAccounts,即可取得可在指定 provider 重複使用的已儲存身分。每個項目的 label 用於顯示,active 表示該身分是否與目前 session 的使用中帳戶相符。accountId 是由 provider 擁有的不透明 ID。請勿解析或修改,直接原樣傳給登入請求。
mode: 'default' 可依 provider 的一般行為重複使用已儲存的身分。使用 mode: 'selectAccount' 則會明確顯示 provider 的帳戶選擇器,此時請勿傳入 accountId。begin(LoginProviderKind::ENTRA) 等既有呼叫方式仍可繼續使用。
最新資訊請參考 GitHub 儲存庫。