AWS的AppSync - 从IOS客户端获得401S(aws appsync - getting

2019-10-29 18:04发布

所以,当我运行从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。

任何帮助,将不胜感激,我敲我的头就这一个。

Answer 1:

你有在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策略。 我还建议使用经过验证的用户更严格的策略。



文章来源: aws appsync - getting 401s from ios client