亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 golang 和 JS 生成時授權字符串不相同

使用 golang 和 JS 生成時授權字符串不相同

Go
慕萊塢森 2022-12-19 10:48:31
我在使用 Golang 為 API 訪問生成正確的授權字符串時遇到問題。我嘗試使用 JS,字符串可以使用,而來自 golang 的字符串不能用于身份驗證。你能幫我檢查一下有什么不同并糾正我嗎?這是我的 golang 代碼:func generateSalt(dataToSign string) string {    token := hmac.New(sha256.New, []byte("secret"))    token.Write([]byte(dataToSign))    macSum := token.Sum(nil)    return base64.StdEncoding.EncodeToString(macSum)}func main() {    date = "Wed, 25 May 2022 09:16:45 GMT"    uri := "groups"    url := fmt.Sprintf("https://api-worldcheck.refinitiv.com/v2/%s", uri)    dataToSign := fmt.Sprintf(`(request-target): get %s%vhost: %s%vdate: %s`, "/v2/groups", "\r\n", "api-worldcheck.refinitiv.com", "\r\n", date)    log.Printf("dateToSign: %s", dataToSign)    hmac := generateSalt(dataToSign)    authorization := fmt.Sprintf(`Signature keyId="%s",algorithm="hmac-sha256",headers="(request-target) host date",signature="%s"`, "api-key", hmac)    log.Printf("authorization: %s", authorization)}golang 的結果是 dZzRZfa0yVZsTWof+qEz5VhsFyV83b6DDKXzG9pp/yk=JS上的代碼function generateAuthHeader(dataToSign){    var hash = CryptoJS.HmacSHA256(dataToSign,environment["api-secret"]);    return hash.toString(CryptoJS.enc.Base64); }var date = "Wed, 25 May 2022 09:16:45 GMT";var dataToSign = "(request-target): get " + environment["gateway-url"] + "groups\n" +        "host: " + environment["gateway-host"] + "\n" +        "date: " + date;        console.log("date", date)        console.log({dataToSign})var hmac = generateAuthHeader(dataToSign);var authorisation = "Signature keyId=\"" + environment["api-key"] + "\",algorithm=\"hmac-sha256\",headers=\"(request-target) host date\",signature=\"" + hmac + "\"";        console.log({authorisation})結果為 nx5uyMlq4kOxY1fD5OpoLE6UGI+f5p3OUy+l6G8+oxc=
查看完整描述

1 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

這兩個片段都有不同的數據要簽名。JS 有一些使用的環境變量可能不同。我從 Go 代碼中獲取了這些值。


Go 代碼:Go 游樂場示例

// You can edit this code!

// Click here and start typing.

package main


import (

    "crypto/hmac"

    "crypto/sha256"

    "encoding/base64"

    "fmt"

    "log"

)


func generateSalt(dataToSign string) string {

    token := hmac.New(sha256.New, []byte("secret"))

    token.Write([]byte(dataToSign))

    macSum := token.Sum(nil)

    return base64.StdEncoding.EncodeToString(macSum)

}


func main() {

    date := "Wed, 25 May 2022 09:16:45 GMT"

    uri := "groups"

    url := fmt.Sprintf("https://api-worldcheck.refinitiv.com/v2/%s", uri)

    host := "api-worldcheck.refinitiv.com"

    dataToSign := fmt.Sprintf("(request-target): get %s\nhost: %s\ndate: %s", url, host, date)

    log.Printf("dateToSign: %s", dataToSign)

    hmac := generateSalt(dataToSign)

    authorization := fmt.Sprintf(`Signature keyId="%s",algorithm="hmac-sha256",headers="(request-target) host date",signature="%s"`, "api-key", hmac)

    log.Printf("authorization: %s", authorization)

}

JS代碼:


function generateAuthHeader(dataToSign){

    var hash = CryptoJS.HmacSHA256(dataToSign, "secret");

    return hash.toString(CryptoJS.enc.Base64); 

}


var date = "Wed, 25 May 2022 09:16:45 GMT";

var url = "https://api-worldcheck.refinitiv.com/v2/";

var host = "api-worldcheck.refinitiv.com";

var apiKey = "api-key";


var dataToSign = "(request-target): get " + url + "groups\n" +

        "host: " + host + "\n" +

        "date: " + date;

console.log("date", date)

console.log("dataToSign", dataToSign)

var hmac = generateAuthHeader(dataToSign);

var authorisation = "Signature keyId=\"" + apiKey + "\",algorithm=\"hmac-sha256\",headers=\"(request-target) host date\",signature=\"" + hmac + "\"";

console.log(authorisation);

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>


兩者都有簽名為pZjwRvunAPwUs7tFdbFtY6xOLjbpKUYMpnb


查看完整回答
反對 回復 2022-12-19
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號