Вот пост, который я нашел полезным, когда работал над аналогичным приложением (обращаясь к пулу пользователей из Go Lambda): https://benincosa.com/?p=3714
Его пример должен быть в поле (по крайней мере, показать вампуть вперед).
TLDR, адаптированный
Создание сеанса:
ses, _ := session.NewSession(&aws.Config{Region: aws.String("us-east-1")})
Аутентификация от провайдера:
params := &cognitoidentityprovider.InitiateAuthInput{
AuthFlow: aws.String("USER_PASSWORD_AUTH"),
AuthParameters: map[string]*string{
"USERNAME": aws.String("maria@vontropps.com"),
"PASSWORD": aws.String("doremefasolatido"),
},
ClientId: aws.String("123456789abcdefghijklmnopq"),
}
cip := cognitoidentityprovider.New(ses)
authResp, _ := cip.InitiateAuth(params)
Получение удостоверения:
svc := cognitoidentity.New(ses)
idRes, _ := svc.GetId(&cognitoidentity.GetIdInput{
IdentityPoolId: aws.String("us-east-1:123456789-444-4444-123456789abc"),
Logins: map[string]*string{
"cognito-idp.<reg>.amazonaws.com/us-east-1_<id>": authResp.AuthenticationResult.IdToken,
},
})
credRes, _ := svc.GetCredentialsForIdentity(&cognitoidentity.GetCredentialsForIdentityInput{
IdentityId: idRes.IdentityId,
Logins: map[string]*string{
"cognito-idp.<reg>.amazonaws.com/us-east-1_<id>": authResp.AuthenticationResult.IdToken,
},
})
Вызов API:
url := "fill in your endpoint"
client := new(http.Client)
req, _ := http.NewRequest("GET", url, nil)
Знак:
v := v4.NewSigner(credentials.NewStaticCredentials(
*credRes.Credentials.AccessKeyId,
*credRes.Credentials.SecretKey,
*credRes.Credentials.SessionToken,
))
v.Sign(req, nil, "execute-api", "us-east-1", time.Now())
Сделать ответ:
resp, _ := client.Do(req)
Ручка Resp:
b, _ := ioutil.ReadAll(resp.Body)
resp.Body.Close()
fmt.Printf("%s\n", b)