ApolloHttpException: HTTP 401 при использовании AWS Appsync с режимом аутентификации IAM в приложении Android - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь интегрировать API-интерфейс Appsync Graphql с режимом аутентификации AWS_IAM в приложение для Android.Я следовал документации по AWS, связанной с этим, но я получаю ApolloHttpException: ошибка HTTP 401.

2018-10-19 09:38:34.853 4679-4739/io.xxxxxxx.android.cognitoiamtest E/AWS: Failed to perform AllPostsQuery
com.apollographql.apollo.exception.ApolloHttpException: HTTP 401 
    at com.apollographql.apollo.internal.interceptor.ApolloParseInterceptor.parse(ApolloParseInterceptor.java:147)
    at com.apollographql.apollo.internal.interceptor.ApolloParseInterceptor.access$100(ApolloParseInterceptor.java:54)
    at com.apollographql.apollo.internal.interceptor.ApolloParseInterceptor$1.onResponse(ApolloParseInterceptor.java:83)
    at com.apollographql.apollo.internal.interceptor.ApolloServerInterceptor$1$1.onResponse(ApolloServerInterceptor.java:110)
    at okhttp3.RealCall$AsyncCall.execute(RealCall.java:141)
    at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:764)

Код клиента Appsync:

val awsConfig = AWSConfiguration(context)

val credentialsProvider = CognitoCachingCredentialsProvider(context, awsConfig)

client = AWSAppSyncClient.builder()
                .context(context)
                .awsConfiguration(awsConfig)
                .credentialsProvider(credentialsProvider)
                .build()

My awsconfiguration.json

{
    "UserAgent": "aws-amplify-cli/0.1.0",
    "Version": "1.0",
    "IdentityManager": {
    "Default": {}
    },
    "CredentialsProvider": {
        "CognitoIdentity": {
            "Default": {
                "PoolId": "xx-xxxx-x:xxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
                "Region": "xx-xxxx-x"
            }
        }
    },
    "CognitoUserPool": {
        "Default": {
            "PoolId": "xx-xxxxx-x_xxxxxx",
            "AppClientId": "xxxxxxxxxxxxxxxxxx",
            "AppClientSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "Region": "xx-xxxxx-x"
        }
    },
    "AppSync": {
        "Default": {
            "ApiUrl": "https://xxxxxxxxxxxxxxxxxx.appsync-api.xx-xxxxx-x.amazonaws.com/graphql",
            "Region": "xx-xxxxx-x",
            "AuthMode": "AWS_IAM",
            "ApiKey": "xxx-xxxxxxxxxxxxxxxxxxx"
        }
    }
}

Я также добавил следующую политику к проверенной роли в Identity Pool.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
            "appsync:GraphQL"
            ],
            "Resource": [
                "arn:aws:appsync:xx-xxxx-x:xxxxxxxxx:apis/CognitoIAMTest/types/Query/fields/listCities"
            ]
        }
    ]
}

Хотя ресурсов Appsync с аутентификацией IAM для Android очень мало, но я попробовал все, что могнайти в Интернете.Я не уверен, что мне не хватает.Любая помощь по этому поводу будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...