# 有两种方式证明你的身份：使用密码，或验证发起连接的地址。

两种方式都适用于所有网络和两种协议。可以按服务器选择，也可以自由混用。


## 选择验证方式

|  | 用户名和密码 | IP 白名单 |
| --- | --- | --- |
| 适用来源 | 任意 IP，包括动态 IP 和云端 IP | 你已登记的公共 IPv4 地址 |
| 定向参数 | 附加到用户名中 | 发送任意用户名以传递参数；密码会被忽略 |
| 传输中的凭据 | `Proxy-Authorization` 标头中的 Base64 数据 | 无 |
| 最适合 | 笔记本电脑、容器、无服务器平台、浏览器 | 固定服务器、无法保存密码的反检测浏览器、Chrome 启动参数 |
| 轮换 | 随时重新生成密码 | 随时添加或移除地址 |


## 用户名和密码

你的账户拥有一组用于共享网关的凭据。它显示在控制面板的 **凭据** 下，也会由 [`GET /v1/credentials`](https://proxshift.com/zh/docs/api#get-v1-credentials) 返回。用户名携带[定向参数](https://proxshift.com/zh/docs/username-parameters)；密码不会随这些参数变化。

```bash
# 通过住宅网关访问 HTTP(S) 目标
curl -x http://USER-cc-us:PASS@res.proxshift.com:9000 https://api.ipify.org

# 通过 SOCKS5 完成相同操作（socks5h = 在出口处解析主机名）
curl --proxy socks5h://USER-cc-us:PASS@res.proxshift.com:9001 https://api.ipify.org
```

在底层，HTTP 客户端会在请求或 `CONNECT` 上发送 `Proxy-Authorization: Basic base64(username:password)`；SOCKS5 客户端则使用用户名/密码子协商（RFC 1929）。只要代理 URL 中包含凭据，所有主流客户端都会自动完成这些操作。

> Info：密码由字母和数字生成，因此无需进行 URL 编码。如果你自行设置的密码包含 `@`、`:` 或 `/`，请在代理 URL 中对这些字符进行百分号编码（`@` 变为 `%40`）。


## IP 白名单

登记将要发起连接的机器的公共 IPv4 地址，这些机器无需凭据即可使用所有端点。每个账户最多可登记 50 个地址；更改会在一分钟内生效。

1. 查找目标网站会看到的服务器地址：在**不使用**代理的情况下运行 `curl https://api.ipify.org`。
2. 在 **设置 → 白名单** 中添加该地址，或调用 [`POST /v1/whitelist`](https://proxshift.com/zh/docs/api#post-v1-whitelist)。
3. 连接时不提供用户名和密码。如果没有用户名，出口将在全球范围内选择，并在每次连接时轮换。
4. 如需定向，请继续发送包含所需参数的用户名以及任意密码：白名单中的地址无论密码为何都会受到信任。

```bash
# 从白名单服务器连接：完全无需凭据
curl -x http://res.proxshift.com:9000 https://api.ipify.org

# 仍通过白名单验证，但指定定向参数：任意密码均可
curl -x http://USER-cc-fr-city-paris:x@res.proxshift.com:9000 https://api.ipify.org
```

> Warn：使用白名单需要稳定的公共 IP。位于运营商级 NAT 后的机器、使用动态地址的家庭网络连接以及大多数无服务器平台应改用密码方式。


## 专属 ISP、数据中心和移动设备

每个专属地址都有自己的用户名和密码，在列表中显示为 `ip:port:user:pass`。白名单也适用于这些地址：从已登记的服务器连接到 `ip:8000` 时完全无需凭据。由于专属地址的位置固定，因此不需要使用参数。

```text
203.0.113.42:8000:u7f3a9c:kq2Lm8Pz1r        # HTTP(S)
203.0.113.42:8001:u7f3a9c:kq2Lm8Pz1r        # SOCKS5，凭据相同
```


## 子用户

子用户是共享网关上的一组额外凭据，拥有独立的流量限额和用量记录。可以为每个客户、项目或团队成员分别创建子用户，这样即使密码泄露，暴露的也只是有限预算，同时还可以按业务线查看用量。子用户可在控制面板中管理，也可通过 [`POST /v1/subusers`](https://proxshift.com/zh/docs/api#post-v1-subusers) 管理。


## 轮换密码

可在控制面板中重新生成密码，也可调用 [`POST /v1/credentials/rotate`](https://proxshift.com/zh/docs/api#post-v1-credentials-rotate)。旧凭据仍会继续有效十分钟，以便正在运行的任务无故障地改用新凭据。


## 避免凭据出现在不该出现的地方

- 从环境变量或密钥存储中读取凭据，切勿将其放入源代码管理系统。
- 在共享网络或不受信任的网络上优先使用白名单：从你到网关的这一段使用纯 HTTP，因此 Basic 标头可能在传输路径上被读取。
- 为每个工具分配一个子用户；停用工具时撤销该子用户，而不是撤销账户密码。
- 从日志中移除代理 URL。发生错误时，大多数客户端会打印包含凭据的完整 URL。


来源：https://proxshift.com/zh/docs/authentication
