-
确保通过运行更新您的身份验证设置以启用经过身份验证和未经身份验证的访问amplify update auth
并手动配置设置。
-
在 API 请求中,您现在可以指定身份验证模式:
const createdTodo = await API.graphql({
query: queries.createTodo,
variables: {input: todoDetails},
authMode: 'AWS_IAM'
});
这里有更详细的文档 https://docs.amplify.aws/lib/graphqlapi/authz/q/platform/js
这些步骤已经过时,但仍然有效:
使用以下步骤,您可以允许经过身份验证和未经身份验证的访问您的 AWS AppSync API:
- 创建一个放大项目
amplify init
- 使用自定义安全配置添加身份验证:
amplify add auth
您想使用默认的身份验证和安全配置吗?NO
选择您要使用的身份验证/授权服务:(使用箭头键)用户注册、登录,与 AWS IAM 控件连接(启用图像或其他内容的每用户存储功能、分析等)
请为您的资源提供一个友好的名称,该名称将用于在项目中标记此类别:您的 API 名称
请输入您的身份池的名称。您的池名
允许未经身份验证的登录吗? (提供您可以通过 AWS IAM 控制的范围缩小的权限)Yes
为其余问题选择默认值
- 添加API
amplify add api
Choose Amazon Cognito 用户池作为授权类型。
- 创建 API
amplify push
-
在 AppSync API 仪表板设置中,将身份验证类型更改为AWS 身份和访问管理 (IAM)
-
In aws.exports.js
在客户端应用程序上,更改aws_appsync_authenticationType
to 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))
- 您现在应该能够在注销时进行查询,在登录时查询和创建突变。
If you'd like to access the unique identity of the logged in user for user authorization & fine grained access control, you can access the
$context.identity.cognitoIdentityId
in the resolver.