# 排查 GitHub Copilot CLI 身份验证问题

登录 Copilot CLI时诊断身份验证失败问题。

## 身份验证错误

如果遇到身份验证错误，请使用下表确定原因和解决方法。

| 問题                                                | 原因                          | 修复                       | 详细信息 |
| ------------------------------------------------- | --------------------------- | ------------------------ | ---- |
| 找不到身份验证信息                                         | 未存储任何凭据                     | 运行 `copilot login`       |      |
| [找不到身份验证信息](#no-authentication-information-found) |                             |                          |      |
| 401 未授权                                           | 令牌吊销或权限不足                   | 使用特定权限生成令牌               |      |
| [令牌已过期或已吊销](#token-expired-or-revoked)            |                             |                          |      |
| Token (classic) 拒绝                                |                             |                          |      |
| Token (classic)（`ghp_`）                           | 使用细粒度 personal access token |                          |      |
| \[                                                |                             |                          |      |
| Token (classic) 拒绝]\(#token-classic-rejected)     |                             |                          |      |
| 403 已禁止或策略被拒绝                                     |                             |                          |      |
| Copilot 许可证或企业/组织策略                               | 检查订阅和组织配置                   |                          |      |
| [Access被拒绝](#access-denied)                       |                             |                          |      |
| 密钥链不可用                                            | 缺少系统密钥链                     | 安装 `libsecret` 或允许纯文本    |      |
| [钥匙串访问失败](#keychain-access-failure)               |                             |                          |      |
| 帐户错误                                              | 多个帐户或环境变量替代                 | 检查环境变量，使用 `/user switch` |      |
| [帐户错误](#wrong-account)                            |                             |                          |      |

## 找不到身份验证信息

Copilot CLI 显示以下错误：

<!-- markdownlint-disable GHD005 -->

```text
Error: No authentication information found
Copilot can be authenticated with GitHub using an OAuth Token or a Fine-Grained Personal Access Token
```

<!-- markdownlint-enable GHD005 -->

### 原因

在所有检查过的位置都没有发现凭据。

### 修复

使用以下步骤查找缺少身份验证的位置并恢复访问权限。

#### 检查身份验证状态

```bash copy
gh auth status
```

如果看到一条消息，提示你未登录，请使用 `gh auth login` 登录或通过 `copilot login` 使用 OAuth 流。

#### 检查是否已设置身份验证环境变量

如果使用环境变量，请检查是否设置了环境变量`COPILOT_GITHUB_TOKEN``GH_TOKEN`或`GITHUB_TOKEN`环境变量：

```bash copy
echo $COPILOT_GITHUB_TOKEN
```

如果命令不打印任何内容，则不会设置变量。 将变量设置为有效的令牌。 若要生成令牌，请参阅 [对 GitHub Copilot CLI 进行身份验证](/zh/copilot/how-tos/copilot-cli/set-up-copilot-cli/authenticate-copilot-cli#authenticating-with-environment-variables)。

```bash copy
 export $COPILOT_GITHUB_TOKEN=PERSONAL_ACCESS_TOKEN
```

#### macOS 密钥链

```bash copy
security find-generic-password -s copilot-cli
```

如果未找到任何项，请再次进行身份验证，或使用`/login` 或 `copilot login` 来创建一项。
如果找到某个项，但身份验证仍然失败，请删除保存的凭据，然后再次进行身份验证， `/login` 或者 `copilot login`：

```bash copy
  security delete-generic-password -s copilot-cli
```

## 令牌已过期或已吊销

Copilot CLI 显示以下错误：

<!-- markdownlint-disable GHD005 -->

```text
Error: Authentication failed

Your GitHub token may be invalid, expired, or lacking the required permissions.

To resolve this, try the following:
  • Start 'copilot' and run the '${LOGIN_COMMAND}' command to re-authenticate
  • If using a Fine-Grained PAT, ensure it has the 'Copilot Requests' permission enabled
  • If using COPILOT_GITHUB_TOKEN, GH_TOKEN or GITHUB_TOKEN environment variable, verify the token is valid and not expired
  • Run 'gh auth status' to check your current authentication status
```

<!-- markdownlint-enable GHD005 -->

### 原因

令牌已被吊销、已过期或创建时未具备所需权限。

### 修复

查看 GitHub 上的令牌状态和权限。 该令牌必须是你的fine-grained personal access token（非组织帐户）拥有的 \*\*\*\*，且具有 **Copilot 请求**权限。 如有必要，请生成具有所需权限的新令牌。

## Token (classic) 拒绝

以无提示方式忽略开头 `ghp_` 的令牌，CLI 的行为就像未设置令牌一样。

### 原因

经典 personal access tokens 版不被 Copilot CLI 支持。

### 修复

生成包含所需范围的精细 personal access token。

## 访问被拒绝

Copilot CLI 显示以下错误之一：

```text
Error: Access denied by policy settings

Your Copilot CLI policy setting may be preventing access. This can happen when:
  • Your organization has restricted Copilot access
  • Your Copilot subscription does not include this feature
  • Required policies have not been enabled by your administrator

To resolve this, visit your Copilot settings: 
```

### 原因

组织策略会阻止 GitHub Copilot CLI或用户帐户缺少 GitHub Copilot 许可证。

### 修复

* 检查你的帐户拥有有效的 GitHub Copilot 许可证。
* 要求组织管理员在组织策略中启用 GitHub Copilot CLI 。

## 密钥链访问失败

登录期间，CLI 会提示你系统密钥链不可用，并询问是否以纯文本形式存储凭据。

```text
System keychain unavailable. Store token in plaintext config file? (y/N)
```

### 原因

系统密钥链不可访问。 这可能会发生在没有 `libsecret` 无头服务器的 Linux 系统上，或发生在存在权限问题的系统上。

### 修复

按照操作系统对应的步骤恢复安全凭据存储。

#### macOS 或 Windows

在 macOS 上，确保“钥匙串访问”应用可用，并且你可以解锁你的登录钥匙串。
在 Windows 上，确认凭据管理器可用，并确保可以访问 Windows 保管库。
如果无法访问系统凭据管理器，请使用纯文本存储（根据提示）或使用环境变量令牌进行身份验证，然后重新运行 `/login` 或 `copilot login`。

#### Linux

在 Linux 上，使用系统密钥环或以纯文本形式存储凭据。

1. 检查`secret-tool`是否已安装：

   ```bash copy
   command -v secret-tool
   ```

2. 如果未找到`secret-tool`，或者搜索命令不返回任何结果，请安装`libsecret`及其依赖项。 例如，在 Debian 和 Ubuntu 上，可以使用以下命令。

   ```bash copy
   sudo apt install libsecret-1-0 gnome-keyring seahorse
   ```

3. 安装 `secret-tool` 后，搜索密钥环以查找保存的凭据：

   ```bash copy
   secret-tool search copilot-cli
   ```

   如果命令返回一个或多个结果，则密钥器中存在凭据。 在终端中运行`copilot login`或在`/login`中再次运行Copilot CLI。

## 帐户错误

对错误的用户进行身份验证，或者令牌属于错误的组织。

### 原因

存储了多个帐户，或环境变量覆盖了已存储的令牌。

### 修复

若要切换帐户，请在 CLI 提示符处使用 `/user switch` ，或者注销 `/logout` 并使用正确的帐户运行 `/login` 。