Graphql 通过身份池联合的开发人员身份验证身份无法在Amplify project中进行AppSync调用

Graphql 通过身份池联合的开发人员身份验证身份无法在Amplify project中进行AppSync调用,graphql,serverless,aws-amplify,aws-appsync,federated-identity,Graphql,Serverless,Aws Amplify,Aws Appsync,Federated Identity,目前,我正在对Linkedin用户进行身份验证,并在Lambda中调用GetOpenIdTokenForDeveloperIdentity和GetCredentialsForIdentity,然后使用Auth.federatedSignIn()登录这些用户,我能够检索当前经过身份验证的用户和凭据 但是,使用Amplify的ApicClass或AWSAPSyncClient,我无法让这些用户通过AppSync进行GraphQL调用,AppSync配置为授权Cognito用户池和AWS IAM用户。

目前,我正在对Linkedin用户进行身份验证,并在Lambda中调用
GetOpenIdTokenForDeveloperIdentity
GetCredentialsForIdentity
,然后使用
Auth.federatedSignIn()
登录这些用户,我能够检索当前经过身份验证的用户和凭据

但是,使用Amplify的ApicClass或AWSAPSyncClient,我无法让这些用户通过AppSync进行GraphQL调用,AppSync配置为授权Cognito用户池和AWS IAM用户。当认证类型相应更改时,Cognito用户池用户进行AppSync调用没有问题

我为联邦用户尝试了以下每一项:

API.graphql({
  query: queries.getUserProfile,
  variables: {
    input: {
      email,
    }
  },
  authMode: 'AWS_IAM'
})

const client = new AWSAppSyncClient({
  url: process.env.GRAPHQL_ENDPOINT,
  region: process.env.AWS_REGION,
  auth: {
    type: AUTH_TYPE.AWS_IAM,
    credentials: async () => Auth.currentCredentials(),
  },
  disableOffline: true,
});

client.query({
  query: gql(queries.getUserProfile),
  variables: {
    input: {
      email,
    },
  },
  fetchPolicy: 'no-cache',
})
身份池是通过无服务器资源/CloudFormation模板配置的,我设置了信任关系和身份验证角色,如下所示:

  ProjectAuthRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Federated: "cognito-identity.amazonaws.com"
            Action:
              - "sts:AssumeRoleWithWebIdentity"
            Condition:
              StringEquals:
                "cognito-identity.amazonaws.com:aud":
                  - Ref: ProjectIdentityPool
              ForAnyValue:StringLike:
                "cognito-identity.amazonaws.com:amr": authenticated
  AuthPolicy:
    Type: AWS::IAM::Policy
    Properties:
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Action:
              - mobileanalytics:PutEvents
              - cognito-sync:*
              - cognito-identity:*
            Resource:
              - "*"
          - Effect: Allow
            Action:
              - appsync:GraphQL
            Resource:
              - "*"
      Roles:
        - Ref: ProjectAuthRole
我已经能够通过在每个类型和输入定义中添加@aws_iam schema指令来进行GraphQL调用,但听起来这甚至不必要,因为授权应该在aws AppSync GraphQL API级别进行


还有什么地方我可能忘记配置的吗?

问题似乎是无服务器appsync插件YAML文件中的
附加身份验证提供程序

我的理解是,如果您希望附加的身份验证提供程序(在我们的示例中,
AWS\u IAM
)与默认身份验证提供程序(在我们的示例中,
AMAZON\u COGNITO\u USER\u pool
)一起具有访问权限,则必须将模式级指令应用于模式中的类型定义

进一步详情来源: