9999 < div data-md-component ="skip ">
100100
101101
102- < a href ="#api " class ="md-skip ">
102+ < a href ="#1 " class ="md-skip ">
103103 跳转至
104104 </ a >
105105
29372937 < ul class ="md-nav__list " data-md-component ="toc " data-md-scrollfix >
29382938
29392939 < li class ="md-nav__item ">
2940- < a href ="#api " class ="md-nav__link ">
2940+ < a href ="#1 " class ="md-nav__link ">
29412941 < span class ="md-ellipsis ">
2942- API 接口配置与使用指南
2942+ 1 接口配置说明
29432943 </ span >
29442944 </ a >
29452945
2946- < nav class ="md-nav " aria-label ="API 接口配置与使用指南 ">
2946+ < nav class ="md-nav " aria-label ="1 接口配置说明 ">
29472947 < ul class ="md-nav__list ">
29482948
29492949 < li class ="md-nav__item ">
2950- < a href ="#swagger " class ="md-nav__link ">
2950+ < a href ="#11-token " class ="md-nav__link ">
29512951 < span class ="md-ellipsis ">
2952- 以下内容已通过 Swagger 进行验证
2952+ 1.1 自定义 Token 格式
29532953 </ span >
29542954 </ a >
29552955
29562956</ li >
29572957
29582958 < li class ="md-nav__item ">
2959- < a href ="#token " class ="md-nav__link ">
2959+ < a href ="#12-header " class ="md-nav__link ">
29602960 < span class ="md-ellipsis ">
2961- 自定义 Token 格式
2961+ 1.2 请求 Header 设计
29622962 </ span >
29632963 </ a >
29642964
29652965</ li >
29662966
29672967 < li class ="md-nav__item ">
2968- < a href ="#header " class ="md-nav__link ">
2968+ < a href ="#13 " class ="md-nav__link ">
29692969 < span class ="md-ellipsis ">
2970- 请求 Header 设计
2971- </ span >
2972- </ a >
2973-
2974- </ li >
2975-
2976- < li class ="md-nav__item ">
2977- < a href ="#_1 " class ="md-nav__link ">
2978- < span class ="md-ellipsis ">
2979- 示例请求头:
2980- </ span >
2981- </ a >
2982-
2983- </ li >
2984-
2985- < li class ="md-nav__item ">
2986- < a href ="#go " class ="md-nav__link ">
2987- < span class ="md-ellipsis ">
2988- 示例实现代码(go)
2970+ 1.3 示例实现代码
29892971 </ span >
29902972 </ a >
29912973
29972979</ li >
29982980
29992981 < li class ="md-nav__item ">
3000- < a href ="#_2 " class ="md-nav__link ">
2982+ < a href ="#2 " class ="md-nav__link ">
30012983 < span class ="md-ellipsis ">
3002- 注意事项
2984+ 2 注意事项
30032985 </ span >
30042986 </ a >
30052987
30062988</ li >
30072989
30082990 < li class ="md-nav__item ">
3009- < a href ="#_3 " class ="md-nav__link ">
2991+ < a href ="#3 " class ="md-nav__link ">
30102992 < span class ="md-ellipsis ">
3011- 常见问题
3012- </ span >
3013- </ a >
3014-
3015- </ li >
3016-
3017- < li class ="md-nav__item ">
3018- < a href ="#_4 " class ="md-nav__link ">
3019- < span class ="md-ellipsis ">
3020- 结语
2993+ 3 常见问题
30212994 </ span >
30222995 </ a >
30232996
31003073 < ul class ="md-nav__list " data-md-component ="toc " data-md-scrollfix >
31013074
31023075 < li class ="md-nav__item ">
3103- < a href ="#api " class ="md-nav__link ">
3076+ < a href ="#1 " class ="md-nav__link ">
31043077 < span class ="md-ellipsis ">
3105- API 接口配置与使用指南
3078+ 1 接口配置说明
31063079 </ span >
31073080 </ a >
31083081
3109- < nav class ="md-nav " aria-label ="API 接口配置与使用指南 ">
3082+ < nav class ="md-nav " aria-label ="1 接口配置说明 ">
31103083 < ul class ="md-nav__list ">
31113084
31123085 < li class ="md-nav__item ">
3113- < a href ="#swagger " class ="md-nav__link ">
3114- < span class ="md-ellipsis ">
3115- 以下内容已通过 Swagger 进行验证
3116- </ span >
3117- </ a >
3118-
3119- </ li >
3120-
3121- < li class ="md-nav__item ">
3122- < a href ="#token " class ="md-nav__link ">
3123- < span class ="md-ellipsis ">
3124- 自定义 Token 格式
3125- </ span >
3126- </ a >
3127-
3128- </ li >
3129-
3130- < li class ="md-nav__item ">
3131- < a href ="#header " class ="md-nav__link ">
3086+ < a href ="#11-token " class ="md-nav__link ">
31323087 < span class ="md-ellipsis ">
3133- 请求 Header 设计
3088+ 1.1 自定义 Token 格式
31343089 </ span >
31353090 </ a >
31363091
31373092</ li >
31383093
31393094 < li class ="md-nav__item ">
3140- < a href ="#_1 " class ="md-nav__link ">
3095+ < a href ="#12-header " class ="md-nav__link ">
31413096 < span class ="md-ellipsis ">
3142- 示例请求头:
3097+ 1.2 请求 Header 设计
31433098 </ span >
31443099 </ a >
31453100
31463101</ li >
31473102
31483103 < li class ="md-nav__item ">
3149- < a href ="#go " class ="md-nav__link ">
3104+ < a href ="#13 " class ="md-nav__link ">
31503105 < span class ="md-ellipsis ">
3151- 示例实现代码(go)
3106+ 1.3 示例实现代码
31523107 </ span >
31533108 </ a >
31543109
31603115</ li >
31613116
31623117 < li class ="md-nav__item ">
3163- < a href ="#_2 " class ="md-nav__link ">
3118+ < a href ="#2 " class ="md-nav__link ">
31643119 < span class ="md-ellipsis ">
3165- 注意事项
3120+ 2 注意事项
31663121 </ span >
31673122 </ a >
31683123
31693124</ li >
31703125
31713126 < li class ="md-nav__item ">
3172- < a href ="#_3 " class ="md-nav__link ">
3127+ < a href ="#3 " class ="md-nav__link ">
31733128 < span class ="md-ellipsis ">
3174- 常见问题
3175- </ span >
3176- </ a >
3177-
3178- </ li >
3179-
3180- < li class ="md-nav__item ">
3181- < a href ="#_4 " class ="md-nav__link ">
3182- < span class ="md-ellipsis ">
3183- 结语
3129+ 3 常见问题
31843130 </ span >
31853131 </ a >
31863132
32043150
32053151 < h1 > API 接口</ h1 >
32063152
3207- < h2 id =" api " > API 接口配置与使用指南 < a class ="headerlink " href =" #api " title =" Permanent link " > ⚓︎ </ a > </ h2 >
3153+ < div class ="admonition note " > </ div >
32083154< p > 本文档详细介绍了如何在三方服务中使用自定义 Token 的验证来访问面板接口。</ p >
3209- < h3 id ="swagger "> 以下内容已通过 Swagger 进行验证< a class ="headerlink " href ="#swagger " title ="Permanent link "> ⚓︎</ a > </ h3 >
3210- < p > 面板 swagger 访问地址:< code > {host}:{port}/1panel/swagger/index.html</ code > </ p >
3211- < h3 id ="token "> 自定义 Token 格式< a class ="headerlink " href ="#token " title ="Permanent link "> ⚓︎</ a > </ h3 >
3212- < p > 我们设计了以下自定义 Token 格式,用于接口请求的身份验证:</ p >
3155+ < h2 id ="1 "> 1 接口配置说明< a class ="headerlink " href ="#1 " title ="Permanent link "> ⚓︎</ a > </ h2 >
3156+ < div class ="admonition note ">
3157+ < p > 登录后,可通过访问 swagger 访问地址:< code > {host}:{port}/1panel/swagger/index.html</ code > 查看所有 API。</ p >
3158+ </ div >
3159+ < h3 id ="11-token "> 1.1 自定义 Token 格式< a class ="headerlink " href ="#11-token " title ="Permanent link "> ⚓︎</ a > </ h3 >
3160+ < div class ="admonition note ">
3161+ < p > 1Panel 设计了以下自定义 Token 格式,用于接口请求的身份验证:</ p >
32133162< div class ="highlight "> < pre > < span > </ span > < code > Token = md5('1panel' + API-Key + UnixTimestamp)
32143163</ code > </ pre > </ div >
32153164< p > 组成部分:</ p >
@@ -3218,7 +3167,9 @@ <h3 id="token">自定义 Token 格式<a class="headerlink" href="#token" title="
32183167< li > API-Key: 面板 API 接口密钥</ li >
32193168< li > UnixTimestamp: 当前的时间戳(秒级)</ li >
32203169</ ul >
3221- < h3 id ="header "> 请求 Header 设计< a class ="headerlink " href ="#header " title ="Permanent link "> ⚓︎</ a > </ h3 >
3170+ </ div >
3171+ < h3 id ="12-header "> 1.2 请求 Header 设计< a class ="headerlink " href ="#12-header " title ="Permanent link "> ⚓︎</ a > </ h3 >
3172+ < div class ="admonition note ">
32223173< p > 每次请求必须携带以下两个 Header:</ p >
32233174< table >
32243175< thead >
@@ -3238,12 +3189,15 @@ <h3 id="header">请求 Header 设计<a class="headerlink" href="#header" title="
32383189</ tr >
32393190</ tbody >
32403191</ table >
3241- < h3 id =" _1 " > 示例请求头:< a class =" headerlink " href =" #_1 " title =" Permanent link " > ⚓︎ </ a > </ h3 >
3192+ < p > 示例请求头:</ p >
32423193< div class ="highlight "> < pre > < span > </ span > < code > curl< span class ="w "> </ span > -X< span class ="w "> </ span > GET< span class ="w "> </ span > < span class ="s2 "> "http://localhost:4004/api/v1/dashboard/current"</ span > < span class ="w "> </ span > < span class ="se "> \</ span >
32433194-H< span class ="w "> </ span > < span class ="s2 "> "1Panel-Token: <1panel_token>"</ span > < span class ="w "> </ span > < span class ="se "> \</ span >
32443195-H< span class ="w "> </ span > < span class ="s2 "> "1Panel-Timestamp: <current_unix_timestamp>"</ span >
32453196</ code > </ pre > </ div >
3246- < h3 id ="go "> 示例实现代码(go)< a class ="headerlink " href ="#go " title ="Permanent link "> ⚓︎</ a > </ h3 >
3197+ </ div >
3198+ < h3 id ="13 "> 1.3 示例实现代码< a class ="headerlink " href ="#13 " title ="Permanent link "> ⚓︎</ a > </ h3 >
3199+ < div class ="admonition note ">
3200+ < p > 以 go 语言为例,展示对应的实现代码:</ p >
32473201< div class ="highlight "> < pre > < span > </ span > < code > < span class ="kd "> func</ span > < span class ="w "> </ span > < span class ="nx "> validateToken</ span > < span class ="p "> (</ span > < span class ="nx "> c</ span > < span class ="w "> </ span > < span class ="o "> *</ span > < span class ="nx "> gin</ span > < span class ="p "> .</ span > < span class ="nx "> Context</ span > < span class ="p "> )</ span > < span class ="w "> </ span > < span class ="kt "> error</ span > < span class ="w "> </ span > < span class ="p "> {</ span >
32483202< span class ="w "> </ span > < span class ="nx "> panelToken</ span > < span class ="w "> </ span > < span class ="o "> :=</ span > < span class ="w "> </ span > < span class ="nx "> c</ span > < span class ="p "> .</ span > < span class ="nx "> GetHeader</ span > < span class ="p "> (</ span > < span class ="s "> "1Panel-Token"</ span > < span class ="p "> )</ span >
32493203< span class ="w "> </ span > < span class ="nx "> panelTimestamp</ span > < span class ="w "> </ span > < span class ="o "> :=</ span > < span class ="w "> </ span > < span class ="nx "> c</ span > < span class ="p "> .</ span > < span class ="nx "> GetHeader</ span > < span class ="p "> (</ span > < span class ="s "> "1Panel-Timestamp"</ span > < span class ="p "> )</ span >
@@ -3262,36 +3216,25 @@ <h3 id="go">示例实现代码(go)<a class="headerlink" href="#go" title="Perman
32623216< span class ="w "> </ span > < span class ="k "> return</ span > < span class ="w "> </ span > < span class ="nx "> hex</ span > < span class ="p "> .</ span > < span class ="nx "> EncodeToString</ span > < span class ="p "> (</ span > < span class ="nx "> h</ span > < span class ="p "> .</ span > < span class ="nx "> Sum</ span > < span class ="p "> (</ span > < span class ="kc "> nil</ span > < span class ="p "> ))</ span >
32633217< span class ="p "> }</ span >
32643218</ code > </ pre > </ div >
3265- < h2 id ="_2 "> 注意事项< a class ="headerlink " href ="#_2 " title ="Permanent link "> ⚓︎</ a > </ h2 >
3266- < ol >
3267- < li >
3268- < p > 时间戳的有效性:
3269- 需要确保服务器与客户端时间同步,否则会导致验证失败。建议使用 NTP 同步时间。</ p >
3270- </ li >
3271- < li >
3272- < p > 白名单使用:
3273- 将可信任的 IP 或 IP 段加入白名单,避免频繁 Token 验证的开销;如需放行所有 IP ,可以配置 < code > 0.0.0.0</ code > 。</ p >
3274- </ li >
3275- </ ol >
3276- < h2 id ="_3 "> 常见问题< a class ="headerlink " href ="#_3 " title ="Permanent link "> ⚓︎</ a > </ h2 >
3277- < ol >
3278- < li >
3279- < p > Q: 如果 1Panel-Token或1Panel-Timestamp 错误怎么办?
3280- A: 返回 401 Unauthorized,提示 "API 接口密钥错误"。</ p >
3281- </ li >
3282- < li >
3283- < p > Q: 如何生成 1Panel-Token?
3284- A: 参考以下伪代码:</ p >
3285- </ li >
3286- </ ol >
3219+ </ div >
3220+ < h2 id ="2 "> 2 注意事项< a class ="headerlink " href ="#2 " title ="Permanent link "> ⚓︎</ a > </ h2 >
3221+ < div class ="admonition note ">
3222+ < ul >
3223+ < li > 时间戳的有效性:需要确保服务器与客户端时间同步,否则会导致验证失败。建议使用 NTP 同步时间。</ li >
3224+ < li > 白名单使用:将可信任的 IP 或 IP 段加入白名单,避免频繁 Token 验证的开销;如需放行所有 IP ,可以配置 < code > 0.0.0.0</ code > 。</ li >
3225+ </ ul >
3226+ </ div >
3227+ < h2 id ="3 "> 3 常见问题< a class ="headerlink " href ="#3 " title ="Permanent link "> ⚓︎</ a > </ h2 >
3228+ < div class ="admonition note ">
3229+ < p > (1)如果 1Panel-Token或1Panel-Timestamp 错误怎么办?
3230+ 后台将返回 401 Unauthorized,并提示 "API 接口密钥错误"。</ p >
3231+ < p > (2)如何生成 1Panel-Token?</ p >
3232+ < p > 请参考以下伪代码:</ p >
32873233< div class ="highlight "> < pre > < span > </ span > < code > < span class ="kd "> const</ span > < span class ="w "> </ span > < span class ="nx "> token</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="nx "> md5</ span > < span class ="p "> (</ span > < span class ="s1 "> '1panel'</ span > < span class ="w "> </ span > < span class ="o "> +</ span > < span class ="w "> </ span > < span class ="nx "> clientToken</ span > < span class ="w "> </ span > < span class ="o "> +</ span > < span class ="w "> </ span > < span class ="nx "> unixTimestamp</ span > < span class ="p "> );</ span >
32883234</ code > </ pre > </ div >
3289- < ol >
3290- < li > Q: 为什么需要两个 Header?
3291- A: 提高验证的复杂度,同时增强安全性。</ li >
3292- </ ol >
3293- < h2 id ="_4 "> 结语< a class ="headerlink " href ="#_4 " title ="Permanent link "> ⚓︎</ a > </ h2 >
3294- < p > 通过上述方式可以实现一个安全、高效的 Token 验证系统。如果有任何问题,请参考具体代码实现或联系我们获取支持。</ p >
3235+ < p > (3)为什么需要两个 Header?
3236+ 提高验证的复杂度,同时增强安全性。</ p >
3237+ </ div >
32953238
32963239
32973240
0 commit comments