iOS: исключение IncompleteSignatureException при вызове AWS Amplify GET

#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?