所以,当我运行从AWS控制台查询,工作的事情很大。 但是我的iOS客户端上,我只得到401错误。
我使用本教程和cognito AUTH的基本代码:
credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegion, identityPoolId: CognitoIdentityPoolId)
let databaseURL = URL(fileURLWithPath:NSTemporaryDirectory()).appendingPathComponent(database_name)
do {
// Initialize the AWS AppSync configuration
let appSyncConfig = try AWSAppSyncClientConfiguration(url: AppSyncEndpointURL, serviceRegion: AWSRegion, credentialsProvider: credentialsProvider!, databaseURL:databaseURL)
// Initialize the AppSync client
appSyncClient = try AWSAppSyncClient(appSyncConfig: appSyncConfig)
// Set id as the cache key for objects
appSyncClient?.apolloClient?.cacheKeyForObject = { $0["id"] }
}
catch {
NSLog("Error initializing appsync client. \(error)")
}
我试图钩住在UI上cognito迹象,这似乎签下我,但是我还是从客户的AppSync得到401错误。
注意:使用apikeybased权威性也工作正常 - 但这个项目所需cognito。
任何帮助,将不胜感激,我敲我的头就这一个。
你有在IAM角色为Cognito身份池,允许调用您的AWS API的AppSync内嵌政策? 它应该是这个样子:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"appsync:GraphQL"
],
"Resource": [
"arn:aws:appsync:us-west-2:123456789012:apis/YourGraphQLApiId/*"
]
}
]
}
你需要根据你如何设置您的池设置此已认证的和/或未经验证的Cognito作用。 在IAM策略的更多细节可以在这里找到: 的AppSync安全指南- AWS_IAM授权
其他答案
这可能是一个好主意,级别为你的设置中设置了一些东西。 首先去AWS的AppSync控制台和您的API点击左侧的设置标签,并选择AWS身份和访问管理(IAM)的授权类型。 单击保存。 然后在桌面上安装了awsmobile CLI:
npm install -g awsmobile-cli
接下来进入你的本地应用程序的项目目录,初始化和Cognito通过添加user-signin
功能:
cd ./my-project
awsmobile init #select defaults
awsmobile user-signin enable
这将创建与你与AWS移动集线器自动配置新Cognito用户群和Cognito身份池。 还将建立正确的IAM策略然而此时不配置的AppSync政策,您需要做手工。
打开IAM控制台,点击左侧的角色。 在该项目的名称搜索框中输入你与上面的awsmobile CLI创建。 其中一个角色都会有_auth_MOBILEHUB的前缀和一个将有_unauth_MOBILEHUB。 根据如果你在登录或只是在未经认证的状态使用Cognito,客户将承担在运行时,这些角色之一。 选择角色(或两者兼有做到这一点),然后单击添加内嵌的政策,然后JSON标签。 输入以下政策(只是用于测试):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"appsync:GraphQL"
],
"Resource": [
"*"
]
}
]
}
现在,如果你仍然得到401错误有别的在进行中比其他客户端中的东西你服务的设置,你可能要开AWS支持票。 然而,如果这是现在的工作,那么你应该让它不是那么宽容使限制该IAM策略。 我还建议使用经过验证的用户更严格的策略。