确保通过amplify update auth
手动运行和配置设置来更新您的身份验证设置以启用经过身份验证和未经身份验证的访问。
在 API 请求中,您现在可以指定身份验证模式:
const createdTodo = await API.graphql({
query: queries.createTodo,
variables: {input: todoDetails},
authMode: 'AWS_IAM'
});
这里有更详细的文档
这些步骤已经过时,但仍然有效:
使用以下步骤,您可以允许对您的 AWS AppSync API 进行身份验证和未经身份验证的访问:
- 创建放大项目
amplify init
- 使用自定义安全配置添加身份验证:
amplify add auth
您想使用默认的身份验证和安全配置吗?不
选择您要使用的身份验证/授权服务:(使用箭头键)
用户注册、登录、连接 AWS IAM 控件(启用图像或其他内容的每用户存储功能、分析等)
请为您的资源提供一个友好名称,用于在项目中标记此类别:YOURAPINAME
请输入您的身份池的名称。你的ID池名
允许未经身份验证的登录?(提供您可以通过 AWS IAM 控制的范围缩小的权限)是
为其余问题选择默认值
- 添加api
amplify add api
选择Amazon Cognito 用户池作为授权类型。
- 创建 API
amplify push
在 AppSync API 控制面板设置中,将身份验证类型更改为AWS Identity and Access Management (IAM)
在aws.exports.js
客户端应用程序中,更改aws_appsync_authenticationType
为AWS_IAM
在 Cognito 仪表板中,单击“管理身份池”并单击您的身份池。
单击“编辑身份池”以查看您的“未经身份验证的角色”和“经过身份验证的角色”
打开 IAM 控制台并找到步骤 8 中的“未经身份验证的角色”
单击“添加内联策略”
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"appsync:GraphQL"
],
"Resource": [
"arn:aws:appsync:<REGION>:<ACCOUNTID>:apis/<APIID>/types/Mutation/fields/listTodos"
]
}
]
}
打开 IAM 控制台并找到步骤 8 中的“经过身份验证的角色”
单击“添加内联策略”
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"appsync:GraphQL"
],
"Resource": [
"arn:aws:appsync:<REGION>:<ACCOUNTID>:apis/<APIID>/types/Mutation/fields/listTodos",
"arn:aws:appsync:<REGION>:<ACCOUNTID>:apis/<APIID>/types/Mutation/fields/createTodo"
]
}
]
}
- 在 index.js 中,添加以下代码:
import { Auth } from 'aws-amplify'
Auth.currentCredentials()
.then(d => console.log('data: ', d))
.catch(e => console.log('error: ', e))
- 您现在应该能够在注销时进行查询,并在登录时查询和创建变更。
如果您想访问登录用户的唯一身份以进行用户授权和细粒度访问控制,您可以$context.identity.cognitoIdentityId
在解析器中访问。