# OAuth 2.0 授权

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com.cn/help/idea/llms.txt).

HTTP 客户端支持 OAuth 2.0 授权。 您可以获取访问令牌并对 OAuth 2.0 受保护资源的请求进行身份验证。 为了让您输入用户凭据，HTTP 客户端 在内置的 JCEF 浏览器中显示登录表单。 这个非模态浏览器不会阻止您在 IDE 中工作，例如，允许您复制和粘贴您的用户名和密码。

一个典型的流程包括以下步骤：

1.  [指定身份验证设置](#create-authentication-configuration)，例如授权类型和令牌 URL，以 JSON 格式在公共环境文件中。

2.  [在您的 HTTP 请求中引用此身份验证配置](#use-authentication-configuration) 使用  `$auth.token`  变量。

3.  运行请求。 如果身份验证成功，您将访问受保护的资源。 您可以在   HTTP 客户端身份验证日志   或   服务   工具窗口中检查接收到的访问令牌和刷新令牌。

4.  您还可以 [手动刷新访问令牌](#manually-acquire-access-token)或通过 [请求新令牌](#force-acquire)重新初始化身份验证过程。

Procedure: 创建身份验证配置

1. 在  `.http`  文件中，在   使用以下方式运行   列表中，选择您想添加身份验证配置的环境。

2. 在工具栏中点击 !["添加"图标](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.general.add.svg) 并选择   身份验证配置  。

这将向公共环境文件中添加一个身份验证配置模板，在所选环境的  `"Auth"`  对象的  `"安全"`  下。 例如：

```JSON
 {
    "dev": {
        "Security": {
          "Auth": {
            "auth-id": {
              "Type": "OAuth2",
              "Grant Type": "",
              "Client ID": ""
            }
          }
        }
      }
}

```

3. 将占位符  `auth-id`  替换为一个有意义的名称，以便在您的  `.http`  文件中引用此配置。

4. 请指定 [认证参数](#authentication-configuration-parameters)。 所需的参数取决于所选的  `"Grant Type"` 。 使用 IntelliJ IDEA 编码辅助功能填写认证参数：开始输入参数名称或按 `Ctrl+Space` (Windows), `⌃ Space` (macOS), `⌃ Space` (IntelliJ IDEA Classic (macOS)), `⌃ Space` (macOS System Shortcuts), `Ctrl+Space` (XWin), `Ctrl+Space` (GNOME), `Ctrl+Space` (KDE), `Alt+/` (Emacs), `Ctrl+Space` (Sublime Text), `⌃ Space` (Sublime Text (macOS)), `Ctrl+Space` (Visual Studio), `⌃ Space` (Visual Studio (macOS)), `Ctrl+Space` (NetBeans), `Ctrl+Space` (Eclipse), `⌃ Space` (Eclipse (macOS)) 以获取可用 JSON 键列表。

> **Tip:**
> 您还可以使用专用的 实时模板：在  `"Auth"`  下，开始键入  `auth`  并按 `Enter` (Windows), `⏎` (macOS), `⏎` (IntelliJ IDEA Classic (macOS)), `⏎` (macOS System Shortcuts), `Enter` (XWin), `Enter` (GNOME), `Enter` (KDE), `Enter` (Emacs), `Enter` (Sublime Text), `⏎` (Sublime Text (macOS)), `Enter` (Visual Studio), `⏎` (Visual Studio (macOS)), `Enter` (NetBeans), `Enter` (Eclipse), `⏎` (Eclipse (macOS))。 根据您在  `"Grant Type"` 中选择的值，IntelliJ IDEA 将向配置中添加所需的字段。
>
>
>
> 如果您想快速添加所有可用于认证配置的参数，请按 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS))（   显示上下文操作​​  ）并选择   从 JSON 架构中填充所有属性  。

Procedure: 在 HTTP 请求中使用身份验证配置

一旦创建了身份验证配置，您可以使用它来获取访问令牌并验证您的请求。

1. 将身份验证配置的名称传递给  `{{$auth.token()}}` 变量，例如，  `{{$auth.token("my-config")}}` 。 您可以在请求  `Authorization` 头或查询参数中使用此变量。

2. 点击 ![运行](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.gutter.run.svg)发送请求。 在访问受保护资源之前，HTTP 客户端将向授权服务器发送请求以获取访问令牌。

3. 出现提示时，请完成身份验证过程。 如果身份验证成功完成，HTTP 客户端将访问受保护的资源。

要快速添加  `{{$auth.token()}}` 变量，您可以使用实时模板：在 HTTP 方法中，在 标头 部分开始输入  `AuthorizationToken` ，并从出现的建议列表中选择可用的认证。

![HTTP 客户端 身份验证配置](https://resources.jetbrains.com.cn/help/img/idea/2026.3/http_client_auth_config.animated.gif)

当您运行这样的请求时，   显示身份验证日志   按钮将在   服务   工具窗口中可用。 它让您查看重定向页面、访问令牌和其他身份验证详细信息。

Procedure: 手动获取访问令牌

当您在 HTTP 请求中引用身份验证配置时，HTTP 客户端会在访问受保护资源之前自动获取（或刷新）访问令牌。 如果您想在不向受保护资源发送实际请求的情况下获取访问令牌，您可以手动获取访问令牌。

1. 在  `http-client.env.json` 文件中，点击 ![运行](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.gutter.run.svg)旁边的认证配置名称。

> **Tip:**
> 或者，您可以将文本光标放在 HTTP 请求中的  `$auth.token` 变量上，按下 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS))(   显示上下文操作​​  )，然后选择   获取或刷新身份验证令牌  。

2. 如果身份验证配置包含 [私有变量](http-client-variables.html)，请选择显示的弹出窗口中的私有环境文件。

3. 出现提示时，请完成身份验证过程。

如果身份验证成功，IntelliJ IDEA 将获得访问令牌。 如果您已经拥有访问令牌，但它已过期，IntelliJ IDEA 将会刷新它。

Procedure: 获取新的访问令牌

除了刷新令牌之外，您还可以通过重新身份验证来获取新令牌，也就是重复您用于获取初始访问令牌的原始流程。

1. 在  `http-client.env.json`  文件中，将文本光标放在身份验证配置名称上。

2. 按 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS)) (   显示上下文操作​​  )，然后选择   强制获取身份验证令牌  。

3. 如果身份验证配置包含 [私有变量](http-client-variables.html)，请选择显示的弹出窗口中的私有环境文件。

当您的文本光标位于  `$auth.token`  变量的  `.http`  文件中时，您可以调用相同的操作。 在这种情况下，您无需选择一个私有环境文件，因为 HTTP 客户端 将使用与您的  `.http` 文件位于同一文件夹中的那个文件。

> **Tip:**
> 授权服务器可能会将您的身份验证数据存储在内置 JCEF 浏览器的 cookies 中。 在这种情况下，您将会自动认证，并且在 cookies 过期前无需输入用户凭证。

当您刷新或获取新令牌时，访问令牌、刷新令牌及其他身份验证详细信息会显示在   HTTP 客户端身份验证日志  工具窗口中(  `查看 | 工具窗口 | HTTP 客户端身份验证日志` )。

![HTTP 客户端身份验证日志工具窗口](https://resources.jetbrains.com.cn/help/img/idea/2026.3/http_client_authentication_log_tool_window.png)

Procedure: 清除浏览器 Cookie

您的授权服务器可能会将身份验证数据存储在浏览器 Cookie 中。 如果您想使用不同的数据测试身份验证流程，您可能需要清除内置 JCEF 浏览器的 cookies。

1. 在  `http-client.env.json` 文件中，将文本光标放在认证配置名称上并按 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS)) (   显示上下文操作​​  )。

2. 选择   清除浏览器 Cookie  。

或者，您可以通过点击 ![清除 Cookie](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.general.delete.svg) 在   HTTP 客户端身份验证日志   工具窗口中清除 cookies。

Procedure: 使用 ID 令牌代替访问令牌

如果您的服务器需要使用 ID 令牌而不是访问令牌，您可以通过以下任何一种方式配置 HTTP 客户端 来实现这一点：

* 在您的身份验证配置中，使用  `"Use ID Token": true` 参数。

* 在一个  `.http`  文件中，使用  `$auth.idToken`  变量，例如  `Authorization: Bearer {{$auth.idToken("auth-id-1")}}` 。

Procedure: 使用自定义身份验证参数

HTTP 客户端 提供了一个定义自定义请求参数的选项，以满足您的授权服务器可能需要的要求。 这包括例如  `resource` 和  `受众` 扩展了OAuth 2.0授权框架。

1. 在您的身份验证配置中，添加  `"自定义请求参数"`  对象。

2. 在  `"自定义请求参数"`  内，输入您的参数名称和值（字符串或数组）。

3. 如果您想将参数的使用限制在某些请求上，请将该值定义为具有两个键的对象：

* `"值"` （参数值）

* `"Use"` — 使用该形参的作用域。 它有三个可能的值： * `"Use": "Everywhere"` （在任何请求中） * `"Use": "In Auth Request"` （仅用于身份验证请求） * `"Use": "In Token Request"` （仅用于令牌请求）

例如：

```JSON
"auth-id-1": {
    "Type": "OAuth2",
    "Custom Request Parameters": {
        "audience": {
          "Value": "https://my-audience.com/",
          "Use": "In Token Request"
        },
        "resource": [
          "https://my-resource/resourceId1",
          "https://my-resource/resourceId2"
        ],
        "my-custom-parameter": "my-custom-value"
      },
}

```

使用   HTTP 客户端身份验证日志   工具窗口查看请求中使用的参数及其值。

Procedure: 使用自定义请求头

HTTP 客户端提供了一个选项，可使用您的授权服务器可能需要的自定义请求头。

1. 在您的身份验证配置中，添加  `"Custom Request Headers"`  对象。

2. 在  `"Custom Request Headers"`  中输入您的头名称及其值。

按 `Ctrl+Space` (Windows), `⌃ Space` (macOS), `⌃ Space` (IntelliJ IDEA Classic (macOS)), `⌃ Space` (macOS System Shortcuts), `Ctrl+Space` (XWin), `Ctrl+Space` (GNOME), `Ctrl+Space` (KDE), `Alt+/` (Emacs), `Ctrl+Space` (Sublime Text), `⌃ Space` (Sublime Text (macOS)), `Ctrl+Space` (Visual Studio), `⌃ Space` (Visual Studio (macOS)), `Ctrl+Space` (NetBeans), `Ctrl+Space` (Eclipse), `⌃ Space` (Eclipse (macOS)) 获取流行头的建议列表，例如  `Accept` 、  `Cookie`  或  `User-Agent` 。

3. 如果您想将头的使用限制在某些请求中，请将值定义为具有两个键的对象：

* `"值"` （头值）

* `"Use"` — 使用该头的范围。 它有三个可能的值： * `"Use": "Everywhere"` （在任何请求中） * `"Use": "In Auth Request"` （仅用于身份验证请求） * `"Use": "In Token Request"` （仅用于令牌请求）

例如：

```JSON
"auth-id-1": {
    "Type": "OAuth2",
      "Custom Request Headers": {
        "Accept": {
          "Use": "Everywhere",
          "Value": "application/javascript"
        },
        "my-custom-header": "my-custom-value"
      },
}

```

## 认证配置参数

类型
: 身份验证类型。 可能的值：
:
:
:
: * `"OAuth2"` ：使用 OAuth2 进行请求验证。
:
: * `"Mock"` （用于开发或测试环境）：模拟认证过程——IntelliJ IDEA 将使用来自认证配置的令牌，而不是由 OAuth2 服务器提供的访问令牌。 请提供 `"Token"` 作为访问令牌，并可选地提供 `"ID Token"` 作为 ID 令牌。 例如： ```JSON "my-auth-id": { "Type": "Mock", "Token": "my-token" } ```

授权类型
: 获取访问令牌的方法。 可能的值：  `"Authorization Code"` 、  `"客户端凭证"` 、  `"Device Authorization"` 、  `"隐式"` 和  `"密码"` 。

授权URL
: 应用程序将重定向客户端请求以获取授权代码的授权 URL。  `"Auth URL"`  是授权代码和隐式授予类型所必需的。

令牌 URL
: 供应商的认证服务器，用于将授权代码交换成访问令牌。  `"Token URL"`  是授权码、客户端凭据、设备授权和密码授权类型所必需的。

重定向 URL
: 客户端应用程序  callback URL ，请求在身份验证后应重定向到该地址。 这可以是来自您的客户端应用程序设置的 URL，或者，如果授权服务器接受任何 URL，请使用任意 URL，例如  `http://localhost:12345/foo/bar` 。

客户端 ID
: 您向 API 提供者注册的客户端公共标识符。 所有 [授权类型](#grant-type)均需要此参数。

客户端密钥
: 由客户端应用程序用于向授权服务器进行身份验证的机密标识符。 此参数是 Client Credentials [grant type](#grant-type) 所必需的。

客户端凭据
: 输入以下其中之一：
:
:
:
: * `"无"` 如果您不想在请求中指定客户端凭证。
:
: * `"in body"` 如果您想在请求正文中发送客户端凭证。
:
: * `"基本"` 发送请求头中的 Basic 认证请求（默认值）。

设备认证URL
: 客户端设备请求以获取设备代码和用户代码的 URL。
:
:
:
: 适用于设备授权许可类型并且是必需的。

打开完整 URI
: 当设置为  `true`  时，浏览器会打开一个验证 URI，其中包含用户代码（ [verification_uri_complete](https://datatracker.ietf.org/doc/html/rfc8628#section-3.2)）。 默认值是  `false` ：浏览器打开验证 URI（没有嵌入的用户代码），用户通常需要手动输入代码。
:
:
:
: 适用于设备授权授予类型。

在浏览器之后开始轮询
: 当设置为  `true`  时，客户端设备应仅在浏览器关闭后向 token 端点发送 access token 请求（轮询）。 默认值是  `false` ：设备持续轮询令牌端点，直到用户完成交互或代码过期。
:
:
:
: 适用于设备授权授予类型。

PKCE
: 启用 [Proof Key for Code Exchange (PKCE)](https://www.rfc-editor.org/rfc/rfc7636)。 适用于授权码许可类型。
:
:
:
: 输入  `"PKCE": true` 以使用默认算法（对自动生成的代码验证器进行 SHA-256 哈希处理）。 或者使用  `"代码挑战方法"` （纯文本或 SHA-256）和  `"代码验证器"`  自定义行为。 例如：
:
:
:
:
: ```JSON
: "PKCE": {
: "Code Challenge Method": "Plain",
: "Code Verifier": "YYLzIBzrXpVaH5KRx86itubKLXHNGnJBPAogEwkhveM"
: },
:
: ```

范围
: 限制应用程序访问用户帐户的范围。 可能的值取决于您尝试访问的服务。

自动获取
: 默认情况下，HTTP 客户端 会在发送请求之前自动刷新或获取访问令牌。 如果您不想在发送请求之前自动刷新或获取访问令牌，请输入  `"Acquire Automatically": false` 。 您可以手动刷新或获取。

用户名
: 作为授权的一部分发送的用户名，与 Password 授权类型一起使用。

密码
: 作为授权的一部分发送的用户密码，用于 Password 授权类型。 为了避免共享您的密码，您可以使用 [private variable](http-client-variables.html)而不是值，例如  `"密码": "{{password}}"` 。

自定义请求参数
: 指定 [自定义请求参数](#custom-authentication-parameters)

自定义请求头
: 指定 [自定义请求头](#use-custom-request-headers)

