【发布时间】:2019-08-30 19:33:39
【问题描述】:
目前我在 AWS Amplify 项目中使用 Amazon Cognito 进行身份验证,因此只有登录用户才能访问该 API。 但我想让一些 api 调用公开访问。
我该怎么做?
【问题讨论】:
标签: amazon-web-services amazon-iam aws-amplify aws-appsync
目前我在 AWS Amplify 项目中使用 Amazon Cognito 进行身份验证,因此只有登录用户才能访问该 API。 但我想让一些 api 调用公开访问。
我该怎么做?
【问题讨论】:
标签: amazon-web-services amazon-iam aws-amplify aws-appsync
对于 AppSync API - API 密钥被视为“未经身份验证”
请参阅以下文档: https://docs.aws.amazon.com/appsync/latest/devguide/security.html#api-key-authorization
【讨论】:
我刚刚解决了这个完全相同的问题。这就是我所做的:
通过运行 amplify update auth 更新您的 API 并选择 IAM 作为您的用户处理程序(其他一切都使用默认值)
登录到您的 AWS 控制台 -> Appsync 并修改对 IAM(而不是 Cognito 池)的访问权限
转到 IAM 控制台并为 AUTH 和 UNAUTH 用户创建 IAM 策略(通过键入您的 Appsync 应用程序的名称在列表中搜索它们)
找到 AUTH 用户并附上以下政策(使用您的信息更新):
授权用户
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "appsync:GraphQL",
"Resource": [
"arn:aws:appsync:<AWS region>:<AWS account ID>:apis/<app sync endpoint ID>/*"
]
}
]
}
找到 unauth 用户并附上以下政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "appsync:GraphQL",
"Resource": [
"arn:aws:appsync:<AWS region>:<AWS account ID>:apis/<app sync endpoint ID>/types/Query/fields/<your Query name>",
"arn:aws:appsync:<AWS region>:<AWS account ID>:apis/<app sync endpoint ID>/types/Query/fields/<your Query name>",
"arn:aws:appsync:<AWS region>:<AWS account ID>:apis/<app sync endpoint ID>/types/Query/fields/<your Query name>"
]
}
]
}
import AWSAppSyncClient, {AUTH_TYPE} from "aws-appsync";
并使用它在 AppSync 初始化中加载凭据
const client = new AWSAppSyncClient(
{
disableOffline: true,
url: aws_config.aws_appsync_graphqlEndpoint,
region: aws_config.aws_cognito_region,
auth: {
// IAM
type: AUTH_TYPE.AWS_IAM,
credentials: () => Auth.currentCredentials(),
});
希望这会有所帮助。
【讨论】: