第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

使用 Go 進行 IAM 身份驗證的 API 網(wǎng)關 HTTP 客戶端請求

使用 Go 進行 IAM 身份驗證的 API 網(wǎng)關 HTTP 客戶端請求

Go
函數(shù)式編程 2023-06-19 15:19:25
我正在使用來自 spf13 的優(yōu)秀 cobra/viper 包實現(xiàn) CLI?。我們有一個以 API 網(wǎng)關端點為前端的 Athena 數(shù)據(jù)庫,它使用 IAM 進行身份驗證。也就是說,為了使用 Postman 與其端點進行交互,我必須定義AWS Signature為授權方法,定義相應的 AWS id/secret,然后在 Headers 中將有X-Amz-Security-Token和其他。沒有異常,按預期工作。由于我是 Go 的新手,我有點震驚地看到?jīng)]有示例來執(zhí)行這個簡單的 HTTP GET 請求本身aws-sdk-go......我正在嘗試使用共享憑證提供程序(~/.aws/credentials),如來自 re:Invent 2015 的S3 客戶端Go 代碼片段:req?:=?request.New(nil)我怎樣才能在 2019 年完成這個看似簡單的壯舉,而不必訴諸自煮,net/http因此不必手動閱讀~/.aws/credentials或更糟糕的是,使用os.Getenv和其他丑陋的技巧?任何作為客戶端交互的 Go 代碼示例?都會非常有幫助。拜托,沒有 Golang Lambda/服務器示例,那里有很多。
查看完整描述

4 回答

?
繁星coding

TA貢獻1797條經(jīng)驗 獲得超4個贊

不幸的是,自從編寫了接受的答案以來,該庫似乎已經(jīng)更新,并且解決方案不再相同。經(jīng)過反復試驗,這似乎是處理簽名的最新方法:


import (

? ? "context"

? ? "net/http"

? ? "time"


? ? "github.com/aws/aws-sdk-go-v2/config"

? ? "github.com/aws/aws-sdk-go-v2/aws/signer/v4"

)


func main() {

? ? // Context is not being used in this example.

? ? cfg, err := config.LoadDefaultConfig(context.TODO())


? ? if err != nil {

? ? ? ? // Handle error.

? ? }


? ? credentials, err := cfg.Credentials.Retrieve(context.TODO())


? ? if err != nil {

? ? ? ? // Handle error.

? ? }


? ? // The signer requires a payload hash. This hash is for an empty payload.

? ? hash := "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"

? ? req, _ := http.NewRequest(http.MethodGet, "api-gw-url", nil)

? ? signer := v4.NewSigner()

? ? err = signer.SignHTTP(context.TODO(), credentials, req, hash, "execute-api", cfg.Region, time.Now())


? ? if err != nil {

? ? ? ? // Handle error.

? ? }


? ? // Use `req`

}


查看完整回答
反對 回復 2023-06-19
?
森欄

TA貢獻1810條經(jīng)驗 獲得超5個贊

下面的解決方案使用 aws-sdk-go-v2 https://github.com/aws/aws-sdk-go-v2

// A AWS SDK session is created because the HTTP API is secured using a

// IAM authorizer. As such, we need AWS client credentials and a

// session to properly sign the request.

cfg, err := external.LoadDefaultAWSConfig(

    external.WithSharedConfigProfile(profile),

)

if err != nil {

    fmt.Println("unable to create an AWS session for the provided profile")

    return

}



req, _ := http.NewRequest(http.MethodGet, "", nil)

req = req.WithContext(ctx)

signer := v4.NewSigner(cfg.Credentials)

_, err = signer.Sign(req, nil, "execute-api", cfg.Region, time.Now())

if err != nil {

    fmt.Printf("failed to sign request: (%v)\n", err)

    return

}


res, err := http.DefaultClient.Do(req)

if err != nil {

    fmt.Printf("failed to call remote service: (%v)\n", err)

    return

}


defer res.Body.Close()

if res.StatusCode != 200 {

    fmt.Printf("service returned a status not 200: (%d)\n", res.StatusCode)

    return

}



查看完整回答
反對 回復 2023-06-19
?
鴻蒙傳說

TA貢獻1865條經(jīng)驗 獲得超7個贊

第一個參數(shù)request.Newaws.Config,您可以在其中發(fā)送憑據(jù)。


例如使用靜態(tài)值:

creds:=?credentials.NewStaticCredentials("AKID",?"SECRET_KEY",?"TOKEN")
req?:=?request.New(aws.Config{Credentials:?creds},?...)


查看完整回答
反對 回復 2023-06-19
?
元芳怎么了

TA貢獻1798條經(jīng)驗 獲得超7個贊

如果您查看 s3.New() 函數(shù)的代碼aws-sdk-go/service/s3/service.go

func?New(p?client.ConfigProvider,?cfgs?...*aws.Config)?*S3?{
c?:=?p.ClientConfig(EndpointsID,?cfgs...)
return?newClient(*c.Config,?c.Handlers,?c.Endpoint,?c.SigningRegion,?.SigningName)?}

相對于 request.New() 函數(shù)aws-sdk-go/aws/request/request.go

func?New(cfg?aws.Config,?clientInfo?metadata.ClientInfo,?handlers?Handlers,
retryer?Retryer,?operation?*Operation,?params?interface{},?data?interface{})?*Request?{?...

正如您在 s3 場景中看到的,*aws.Config 結構是一個指針,因此可能在其他地方初始化/填充。與 aws.Config 是參數(shù)的請求函數(shù)相反。所以我猜請求模塊可能是一個非常低級的模塊,它不會自動獲取共享憑證。

func?New(p?client.ConfigProvider,?cfgs?...*aws.Config)?*APIGateway?{
c?:=?p.ClientConfig(EndpointsID,?cfgs...)
return?newClient(*c.Config,?c.Handlers,?c.Endpoint,?c.SigningRegion,?c.SigningName)?}...

它看起來與 s3 客戶端幾乎相同,所以也許嘗試使用它看看你如何去?


查看完整回答
反對 回復 2023-06-19
  • 4 回答
  • 0 關注
  • 249 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號