Я пытаюсь интегрировать 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 очень мало, но я попробовал все, что могнайти в Интернете.Я не уверен, что мне не хватает.Любая помощь по этому поводу будет принята с благодарностью.