Graphql 通过身份池联合的开发人员身份验证身份无法在Amplify project中进行AppSync调用
目前,我正在对Linkedin用户进行身份验证,并在Lambda中调用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用户。
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
)一起具有访问权限,则必须将模式级指令应用于模式中的类型定义
进一步详情来源: