#ios #amazon-web-services #aws-amplify #http-status-code-403
#iOS #amazon-web-services #aws-amplify #http-status-code-403
Вопрос:
У меня возникла проблема, из-за которой я не могу выполнить запрос GET к AWS Amplify API даже после, казалось бы, правильной настройки всего. В настоящее время я использую AWSMobileClient и iOS Amplify SDK для разработки приложения:
AWSMobileClient.sharedInstance().getTokens { (tokens, err) in
NSLog("tokens: (tokens.debugDescription)")
NSLog("tokens: (tokens!.idToken!.claims.debugDescription)")
self.doInvokeAPI(token: tokens!.idToken!.tokenString!)
}
//...
func doInvokeAPI(token: String) {
let headerParameters = [
"Authorization" : token,
"Content-Type": "application/json",
"Accept": "application/json"
]
let queryParams = ["response" : "true"]
let request = RESTRequest(apiName: <ENDPOINT_NAME>, path: <PATH>, headers: headerParameters, queryParameters: queryParams, body: nil)
Amplify.API.get(request: request, listener: responseCallBack)
}
Когда я вызываю Amplify.API.get(), я постоянно получаю ошибку 403, и после создания некоторых вспомогательных функций (responseCallBack) для регистрации HTTP-ответа я получаю это, что показывает, что это исключение IncompleteSignatureException:
HTTP: <NSHTTPURLResponse: 0x283a580a0> { URL: <my-endpoint-url>/<my-path>?response=true } { Status Code: 403, Headers {
"Access-Control-Allow-Origin" = (
"*"
);
"Content-Length" = (
1158
);
"Content-Type" = (
"application/json"
);
Date = (
"Fri, 23 Oct 2020 21:22:06 GMT"
);
"access-control-allow-headers" = (
"*"
);
"x-amzn-errortype" = (
IncompleteSignatureException
);
"x-cache" = (
"Error from cloudfront"
);
} }
Моя конфигурация amplifyconfiguration.файл json выглядит следующим образом:
{
"api": {
"plugins": {
"awsAPIPlugin": {
<MY_ENDPOINT_NAME>: {
"endpointType": "REST",
"endpoint": <MY_ENDPOINT_URL>,
"region": "us-west-2",
"authorizationType": "AMAZON_COGNITO_USER_POOLS"
},
<MY_OTHER_ENDPOINT_NAME>: {
"endpointType": "REST",
"endpoint": <MY_ENDPOINT_URL>,
"region": "us-west-2",
"authorizationType": "AMAZON_COGNITO_USER_POOLS"
}
}
},
},
"auth": {
"plugins": {
"awsCognitoAuthPlugin": {
"IdentityManager": {
"Default": {}
},
"CredentialsProvider": {
"CognitoIdentity": {
"Default": {
"PoolId": <IDENTITY_POOL_ID>,
"Region": "us-west-2"
}
}
},
"CognitoUserPool": {
"Default": {
"PoolId": <USER_POOL_ID>,
"AppClientId": <APP_CLIENT_ID>,
"Region": "us-west-2"
}
},
}
}
},
}
И моя конфигурация awsconfiguration.json выглядит так:
{
"UserAgent": "aws-amplify/cli",
"Version": "1.0.5",
"IdentityManager": {
"Default": {}
},
"CredentialsProvider": {
"CognitoIdentity": {
"Default": {
"PoolId": <IDENTITY_USER_POOL_ID>,
"Region": "us-west-2"
}
}
},
"CognitoUserPool": {
"Default": {
"PoolId": <USER_POOL_ID>,
"AppClientId": <APP_CLIENT_ID>,
"Region": "us-west-2"
}
}
}
Я могу пройти аутентификацию в своем приложении (работает Auth.signIn()) и Amplify.configure() в AppDelegate.swift, похоже, не сталкивается с проблемами, поскольку при попытке настройки ошибок не возникает, поэтому похоже, что он проходит этот момент. Но когда я пытаюсь вызвать API, я получаю эту ошибку. Я включаю токен JWT в заголовок авторизации при выполнении запроса и трижды проверил, что у меня нет опечаток. У кого-нибудь есть идея относительно того, почему я не могу вызвать API?