在新的 AWS-SDK.js V3 中使用什么来代替 new CognitoIdentityCredentials() ?

dmi*_*eev 6 javascript amazon-web-services aws-sdk aws-sdk-js

因此,我将我的项目迁移到新的 AWS-SDK V3,因为它具有模块化功能。然而,我似乎不知道该使用什么来代替CognitoIdentityCredentials新的 API。V2 的代码如下所示:

    const credentials = new CognitoIdentityCredentials(
      {
        IdentityPoolId: config.get("IdentityPoolId"),
        Storage: config,
        Logins: {
          [...]: idToken,
        },
      },
      {
        region: config.get("awsregion"),
      },
    );
    if (credentials.needsRefresh()) {
      ...
    }
Run Code Online (Sandbox Code Playgroud)

CognitoIdentityCredentials尝试在 V3 的github repo中查找,但我唯一发现的是该fromCognitoIdentity函数似乎没有类似的参数。V3 的文档令人困惑并且包含错​​误并且根本没有帮助。您能否为我提供一个工作流程,该工作流程可以实现与 V2 版本相同的功能,但使用新的 API?

Wil*_*ena 4

如果我正确理解您的用例,我认为您可以使用该fromCognitoIdentityPool方法:

const { CognitoIdentityClient, GetIdCommand } = require("@aws-sdk/client-cognito-identity");
const { fromCognitoIdentityPool } = require("@aws-sdk/credential-provider-cognito-identity");

const UserPoolId = "cognito-idp.us-west-2.amazonaws.com/us-west-2_an976DxVk"
const IdentityPoolId = "us-west-2:7y870k8a-12ki-8ik4-84iw-2kdi849sku72"
const jwtIdToken = "eydkslei..." // jwtIdToken cut for brevity

const getCredentials = async () => {
     const cognitoidentity = new CognitoIdentityClient({
          credentials : fromCognitoIdentityPool({
              client : new CognitoIdentityClient(),
              identityPoolId : IdentityPoolId,
              logins: {
                [UserPoolId] : jwtIdToken
              }
           }),
      });
      const credentials = await cognitoidentity.config.credentials()
      console.log(credentials)
      // {
      //    identityId: 'us-west-2:d393294b-ff23-43t6-d8s5-59876321457d',
      //    accessKeyId: 'ALALA2RZ7KTS7STD3VXLM',
      //    secretAccessKey: '/AldkSdt67saAddb6vddRIrs32adQCAo99XM6',
      //    sessionToken: 'IQoJb3JpZ2luX2VjEJj//////////...', // sessionToken cut for brevity 
      //    expiration: 2022-07-17T08:58:10.000Z
      //  }
     return credentials
}
     
getCredentials()
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,您可以查看credentials.expiration以确定是否需要刷新用户凭据。