Amazon web services AWS Golang SDK是否包括对Cognito提供者的支持?

Amazon web services AWS Golang SDK是否包括对Cognito提供者的支持?,amazon-web-services,go,amazon-cognito,Amazon Web Services,Go,Amazon Cognito,我以前在AWS Cognito中使用过AWS mobile SDK。 因此,我有一个AWS Cognito标识池,配置了2个AWS IAM角色(已验证和未验证)。 通过它,我目前正在调用一些AWS Lambda函数。(顺便说一句,我知道AWS API网关) 我现在正尝试对Go/Golang客户端执行类似的操作,即从客户端Go调用AWS Lambda(未经验证的角色),但我找不到示例 我找到了这个信息,但它似乎只是用于调用服务功能(即使用类似于CLI的环境配置机密等) 我还查看了GoAWSSDK

我以前在AWS Cognito中使用过AWS mobile SDK。 因此,我有一个AWS Cognito标识池,配置了2个AWS IAM角色(已验证和未验证)。 通过它,我目前正在调用一些AWS Lambda函数。(顺便说一句,我知道AWS API网关)

我现在正尝试对Go/Golang客户端执行类似的操作,即从客户端Go调用AWS Lambda(未经验证的角色),但我找不到示例

我找到了这个信息,但它似乎只是用于调用服务功能(即使用类似于CLI的环境配置机密等)

我还查看了GoAWSSDK源代码(凭据),它几乎像是从SDK中排除了Cognito提供者选项?我找不到任何提到“identityPoolId”的东西

如果是这样的话,我是否可以在不使用SDK的情况下在Go中以某种方式钩住Javascript公开的接口

虽然我想我也需要在没有Javascript SDK的情况下完成这项工作


ie直接HTTPS呼叫AWS后端?AWS Cognito服务是否以这种方式公开?

当前SDK似乎不支持这种方式。然而,我发现了一种通过使用WebAPI来解决这个问题的方法。首先称之为:

一旦你有了IdendityId调用它:

使用返回的凭据,您拥有来宾/未经验证的角色权限,可以调用您的公共Lambda。IdentityId可以在本地缓存以供后续调用


[编辑]正在进行的工作示例:

这是一篇我在使用类似应用程序(从Go Lambda访问用户池)时发现很有用的帖子:

他的例子应该是概括性的(至少给你一个前进的方向)

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,
           },
   })
签名:

答复:

   resp, _ := client.Do(req)
处理响应:

   b, _ := ioutil.ReadAll(resp.Body)
   resp.Body.Close()
   fmt.Printf("%s\n", b)
   resp, _ := client.Do(req)
   b, _ := ioutil.ReadAll(resp.Body)
   resp.Body.Close()
   fmt.Printf("%s\n", b)