ZBLOG

作为下述代码的服务端,作为服务端处理一下接口请求和aksk 的处理 package main import ( "bytes" "crypto/hmac" "crypto/sha256" "encoding/base64" "encoding/json" "fmt" "net/http" "time" ) // API请求结构体 type ApiRequest struct { Action string `json:"action"` Data string ...

下面是一个简单的服务端示例,能够处理来自客户端的请求并验证 Access Key 和 Signature。这个代码使用 Go 语言和内置的 HTTP 包来构建服务端。我们将实现一个基本的 HTTP 服务器,并定义 API 请求处理逻辑。

package main

import (
	"bytes"
	"crypto/hmac"
	"crypto/sha256"
	"encoding/base64"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

// API请求结构体
type ApiRequest struct {
	Action string `json:"action"`
	Data   string `json:"data"`
}

// 验证签名的函数
func validateSignature(secretKey, data, signature string) bool {
	h := hmac.New(sha256.New, []byte(secretKey))
	h.Write([]byte(data))
	expectedSignature := base64.StdEncoding.EncodeToString(h.Sum(nil))
	return hmac.Equal([]byte(expectedSignature), []byte(signature))
}

func handler(w http.ResponseWriter, r *http.Request) {
	if r.Method != http.MethodPost {
		http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
		return
	}

	const secretKey = "your_secret_key"

	reqBody, err := ioutil.ReadAll(r.Body)
	if err != nil {
		http.Error(w, "Failed to read request body", http.StatusBadRequest)
		return
	}
	defer r.Body.Close()

	var apiRequest ApiRequest
	err = json.Unmarshal(reqBody, &apiRequest)
	if err != nil {
		http.Error(w, "Invalid JSON", http.StatusBadRequest)
		return
	}

	signature := r.Header.Get("X-Signature")
	if !validateSignature(secretKey, string(reqBody), signature) {
		http.Error(w, "Invalid signature", http.StatusUnauthorized)
		return
	}

	fmt.Fprintf(w, "Action: %s\nData: %s\n", apiRequest.Action, apiRequest.Data)

	w.WriteHeader(http.StatusOK)
	fmt.Fprintln(w, "Success")
}

func main() {
	http.HandleFunc("/endpoint", handler)

	port := ":8080" // 根据需要修改端口号
	fmt.Printf("Server is listening on port %s...\n", port)
	err := http.ListenAndServe(port, nil)
	if err != nil {
		fmt.Println("Error starting server:", err)
	}
}

说明:

  1. API请求结构体ApiRequest 用于解析传入的 JSON 数据。
  2. 验证签名validateSignature 函数用于根据请求数据生成 HMAC 签名,并与提供的签名进行比较。
  3. 处理程序
    • 检查 HTTP 方法是否为 POST。
    • 从请求中读取 Body 并解析成 ApiRequest 类型。
    • 从请求头中获取 Signature,并调用验证函数进行验证。如果签名不匹配,返回401 Unauthorized。
  4. 主函数:设置监听器,启动 HTTP 服务器。

启动服务

在命令行中运行这个 Go 文件,服务器会在指定端口上监听来自客户端的请求。确保更改 your_secret_key 为你实际使用的密钥。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20528

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?