跳转至

API 接口

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

1 接口配置说明⚓︎

登录后,可通过访问 swagger 访问地址:{host}:{port}/1panel/swagger/index.html 查看所有 API。

1.1 自定义 Token 格式⚓︎

1Panel 设计了以下自定义 Token 格式,用于接口请求的身份验证:

Token = md5('1panel' + API-Key + UnixTimestamp)

组成部分:

  • 固定前缀: '1panel'
  • API-Key: 面板 API 接口密钥
  • UnixTimestamp: 当前的时间戳(秒级)

1.2 请求 Header 设计⚓︎

每次请求必须携带以下两个 Header:

Header 名称 说明
1Panel-Token 自定义的 Token 值
1Panel-Timestamp 当前时间戳

示例请求头:

curl -X POST "http://{host}:{port}/api/v2/toolbox/device/base" \
-H "1Panel-Token: <1panel_token>" \
-H "1Panel-Timestamp: <current_unix_timestamp>"

1.3 示例实现代码⚓︎

以 go 语言为例,展示对应的实现代码:

func validateToken(c *gin.Context) error {
    panelToken := c.GetHeader("1Panel-Token")
    panelTimestamp := c.GetHeader("1Panel-Timestamp")
    systemToken := panelToken
    systemKey = ******* // 面板 API 密钥
    expectedToken := md5Sum("1panel" + systemKey + panelTimestamp)
    if systemToken != expectedToken {
        return fmt.Errorf("invalid token")
    }
    return nil
}

func md5Sum(data string) string {
    h := md5.New()
    h.Write([]byte(data))
    return hex.EncodeToString(h.Sum(nil))
}

2 注意事项⚓︎

  • 时间戳的有效性:需要确保服务器与客户端时间同步,否则会导致验证失败。建议使用 NTP 同步时间
  • 白名单使用:将可信任的 IP 或 IP 段加入白名单,避免频繁 Token 验证的开销;如需放行所有 IP ,可以配置 ,0.0.0.0/0(所有 IPv4),::/0(所有 IPv6)

3 常见问题⚓︎

  • 如果 1Panel-Token 或 1Panel-Timestamp 错误怎么办

    后台将返回 401 Unauthorized,并提示 "API 接口密钥错误"。

  • 如何生成 1Panel-Token

    请参考以下伪代码:

    const token = md5('1panel' + clientToken + unixTimestamp);
    
  • 为什么需要两个 Header

    提高验证的复杂度,同时增强安全性。