Skip to content

Commit 63dc914

Browse files
committed
更新 API 接口说明
1 parent db78b3e commit 63dc914

File tree

1 file changed

+68
-60
lines changed

1 file changed

+68
-60
lines changed

docs/dev_manual/api_manual.md

Lines changed: 68 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,95 @@
1-
## API 接口配置与使用指南
21

2+
!!! note ""
33
本文档详细介绍了如何在三方服务中使用自定义 Token 的验证来访问面板接口。
44

5-
### 以下内容已通过 Swagger 进行验证
5+
## 1 接口配置说明
66

7-
面板 swagger 访问地址:`{host}:{port}/1panel/swagger/index.html`
7+
!!! note ""
8+
9+
登录后,可通过访问 swagger 访问地址:`{host}:{port}/1panel/swagger/index.html` 查看所有 API。
810

9-
### 自定义 Token 格式
11+
### 1.1 自定义 Token 格式
1012

11-
我们设计了以下自定义 Token 格式,用于接口请求的身份验证:
13+
!!! note ""
1214

13-
```text
14-
Token = md5('1panel' + API-Key + UnixTimestamp)
15-
```
15+
1Panel 设计了以下自定义 Token 格式,用于接口请求的身份验证:
1616

17-
组成部分:
17+
```text
18+
Token = md5('1panel' + API-Key + UnixTimestamp)
19+
```
1820

19-
- 固定前缀: '1panel'
20-
- API-Key: 面板 API 接口密钥
21-
- UnixTimestamp: 当前的时间戳(秒级)
21+
组成部分:
2222

23-
### 请求 Header 设计
23+
- 固定前缀: '1panel'
24+
- API-Key: 面板 API 接口密钥
25+
- UnixTimestamp: 当前的时间戳(秒级)
2426

25-
每次请求必须携带以下两个 Header
27+
### 1.2 请求 Header 设计
2628

27-
| Header 名称 | 说明 |
28-
|------------------|--------------------|
29-
| 1Panel-Token | 自定义的 Token 值 |
30-
| 1Panel-Timestamp | 当前时间戳 |
29+
!!! note ""
3130

32-
### 示例请求头:
31+
每次请求必须携带以下两个 Header:
32+
33+
| Header 名称 | 说明 |
34+
|------------------|--------------------|
35+
| 1Panel-Token | 自定义的 Token 值 |
36+
| 1Panel-Timestamp | 当前时间戳 |
3337

34-
```bash
35-
curl -X GET "http://localhost:4004/api/v1/dashboard/current" \
36-
-H "1Panel-Token: <1panel_token>" \
37-
-H "1Panel-Timestamp: <current_unix_timestamp>"
38-
```
38+
示例请求头:
39+
40+
```bash
41+
curl -X GET "http://localhost:4004/api/v1/dashboard/current" \
42+
-H "1Panel-Token: <1panel_token>" \
43+
-H "1Panel-Timestamp: <current_unix_timestamp>"
44+
```
3945

40-
### 示例实现代码(go)
46+
### 1.3 示例实现代码
4147

42-
```go
43-
func validateToken(c *gin.Context) error {
44-
panelToken := c.GetHeader("1Panel-Token")
45-
panelTimestamp := c.GetHeader("1Panel-Timestamp")
46-
systemToken := panelToken
47-
systemKey = ******* // 面板 API 密钥
48-
expectedToken := md5Sum("1panel" + systemKey + panelTimestamp)
49-
if systemToken != expectedToken {
50-
return fmt.Errorf("invalid token")
51-
}
52-
return nil
53-
}
48+
!!! note ""
49+
以 go 语言为例,展示对应的实现代码:
5450

55-
func md5Sum(data string) string {
56-
h := md5.New()
57-
h.Write([]byte(data))
58-
return hex.EncodeToString(h.Sum(nil))
59-
}
60-
```
51+
```go
52+
func validateToken(c *gin.Context) error {
53+
panelToken := c.GetHeader("1Panel-Token")
54+
panelTimestamp := c.GetHeader("1Panel-Timestamp")
55+
systemToken := panelToken
56+
systemKey = ******* // 面板 API 密钥
57+
expectedToken := md5Sum("1panel" + systemKey + panelTimestamp)
58+
if systemToken != expectedToken {
59+
return fmt.Errorf("invalid token")
60+
}
61+
return nil
62+
}
63+
64+
func md5Sum(data string) string {
65+
h := md5.New()
66+
h.Write([]byte(data))
67+
return hex.EncodeToString(h.Sum(nil))
68+
}
69+
```
6170

62-
## 注意事项
71+
## 2 注意事项
6372

64-
1. 时间戳的有效性:
65-
需要确保服务器与客户端时间同步,否则会导致验证失败。建议使用 NTP 同步时间。
73+
!!! note ""
6674

67-
2. 白名单使用:
68-
将可信任的 IP 或 IP 段加入白名单,避免频繁 Token 验证的开销;如需放行所有 IP ,可以配置 `0.0.0.0`
75+
- 时间戳的有效性:需要确保服务器与客户端时间同步,否则会导致验证失败。建议使用 NTP 同步时间。
76+
- 白名单使用:将可信任的 IP 或 IP 段加入白名单,避免频繁 Token 验证的开销;如需放行所有 IP ,可以配置 `0.0.0.0`。
6977

70-
## 常见问题
78+
## 3 常见问题
7179

72-
1. Q: 如果 1Panel-Token或1Panel-Timestamp 错误怎么办?
73-
A: 返回 401 Unauthorized,提示 "API 接口密钥错误"。
80+
!!! note ""
81+
82+
(1)如果 1Panel-Token或1Panel-Timestamp 错误怎么办?
83+
后台将返回 401 Unauthorized,并提示 "API 接口密钥错误"。
7484

75-
2. Q: 如何生成 1Panel-Token?
76-
A: 参考以下伪代码:
85+
(2)如何生成 1Panel-Token?
7786

78-
```javascript
79-
const token = md5('1panel' + clientToken + unixTimestamp);
80-
```
87+
请参考以下伪代码:
8188

82-
3. Q: 为什么需要两个 Header?
83-
A: 提高验证的复杂度,同时增强安全性。
89+
```javascript
90+
const token = md5('1panel' + clientToken + unixTimestamp);
91+
```
8492

85-
## 结语
93+
(3)为什么需要两个 Header?
94+
提高验证的复杂度,同时增强安全性。
8695

87-
通过上述方式可以实现一个安全、高效的 Token 验证系统。如果有任何问题,请参考具体代码实现或联系我们获取支持。

0 commit comments

Comments
 (0)