描述:
我正在使用 AWS Amplify 开发一个 React 应用程序,它与用于用户身份验证的 AWS Cognito 和用于 GraphQL API 的 AWS AppSync 集成。我的后端是使用 Node.js 中的 CloudFormation Serverless 框架构建的,我的 GraphQL API 支持两种身份验证模式:Cognito 和 IAM。
在这里,我尝试允许未经授权的访客用户使用 IAM 身份验证来访问某些 API 操作,而经过身份验证的用户则使用 Cognito。
问题:
尝试使用 AWS Amplify 的 API 模块中的
generateClient
以及 IAM authMode 从我的 GraphQL 终端节点获取数据以进行未经授权的访问时,我遇到以下错误:
Invalid identity pool configuration. Check assigned IAM roles for this pool.
InvalidIdentityPoolConfigurationException: Invalid identity pool configuration. Check assigned IAM roles for this pool.
详情:
放大配置(src/index.js):
Amplify.configure({
Auth: {
Cognito: {
userPoolId: "****",
userPoolClientId: "****",
identityPoolId: "****",
allowGuestAccess: true,
},
},
API: {
GraphQL: {
endpoint: "https://****.appsync-api.us-east-1.amazonaws.com/graphql",
region: "us-east-1",
defaultAuthMode: "userPool",
},
},
});
这里我使用 graphql API 来使用 src/App.js 中的 id 来获取一本书:
虽然默认授权模式是 cognito 用户池,但我正在将身份池与 IAM 角色一起用于未经授权的用户,这将允许他们访问 graphql API。
import React from "react";
import { generateClient } from "aws-amplify/api";
import { Authenticator } from "@aws-amplify/ui-react";
import { getBookById } from "./graphql/queries";
import "@aws-amplify/ui-react/styles.css";
export default function App() {
const [book, setBook] = React.useState({});
const getBook = async () => {
const client = generateClient("bookstore");
const bookId = "358748d6-f047-4***-8b**-e********";
const book = await client.graphql({
query: getBookById,
variables: { id: bookId },
authMode: "identityPool",
});
setBook(book.data.getBookById);
};
return (
<div style={{ margin: "20px" }}>
<!--code to display book details-->
</div>
);
}
问题背景:
此设置旨在允许访客用户使用 IAM 身份验证(包括 Amazon Cognito 身份池)访问某些 API 查询。
使用 IAM 的访客用户在AWS 控制台上查询成功,表明 IAM 角色已正确配置。
请求帮助:我正在寻求有关如何在 AWS Amplify 中为未经授权的访客用户使用 IAM authMode 和
InvalidIdentityPoolConfigurationException
时解决此 generateClient
错误的指导。任何见解或替代方法将不胜感激!
故障排除工作:
已清除浏览器缓存并检查 AWS IAM 角色。
已验证 AWS Amplify 和 Cognito 配置是否正确。
探索了 AWS Amplify 和 AppSync 文档,但没有找到针对此场景的具体指南。
我也遇到同样的问题