Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

fichby's avatar

Laravel moving app to vapor "UnrecognizedClientException"

Hi I am trying to move my application to laravel vapor

Now that I have deployed it, i am trying to log in and I get the error

Error executing "GetItem" on "https://dynamodb.eu-central-1.amazonaws.com"; AWS HTTP error: Client error: `POST https://dynamodb.eu-central-1.amazonaws.com` resulted in a `400 Bad Request` response: {"__type":"com.amazon.coral.service#UnrecognizedClientException","message":"The security token included in the request i (truncated...) UnrecognizedClientException (client): The security token included in the request is invalid. - {"__type":"com.amazon.coral.service#UnrecognizedClientException","message":"The security token included in the request is invalid."}

however i am not using cacheing in my app.

Please any assistance would be great.

0 likes
12 replies
fichby's avatar

It seems to happen when i post to the login route.

fichby's avatar

this is some of my env file

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync

bugsysha's avatar

Moving app soon to Vapor so hopefully I won't have this issue. If you figure it out, post a solution. Thanks.

fichby's avatar

I already have a few apps on vapor they work amazingly.

This i think i an exceptional case. Although i am not sure what is causing it.

I do know that the default caching driver for vapor is dynamodb, but what is strange is that i am not at this point using any caching in the app, and as shown above set the cache driver to file. I have also tried setting it to array, with no luck.

As soon as i find the solution i will post it.

fichby's avatar

I am still struggling with this, if someone can provide any help. Please

fichby's avatar

here is the full error

(2/2) DynamoDbException
Error executing "GetItem" on "https://dynamodb.eu-central-1.amazonaws.com"; AWS HTTP error: Client error: `POST https://dynamodb.eu-central-1.amazonaws.com` resulted in a `400 Bad Request` response:
{"__type":"com.amazon.coral.service#UnrecognizedClientException","message":"The security token included in the request i (truncated...)
UnrecognizedClientException (client): The security token included in the request is invalid. - {"__type":"com.amazon.coral.service#UnrecognizedClientException","message":"The security token included in the request is invalid."}

in WrappedHttpHandler.php line 195
at WrappedHttpHandler->parseError(array('exception' => object(ClientException), 'connection_error' => false, 'response' => object(Response)), object(Request), object(Command), array())
in WrappedHttpHandler.php line 97
at WrappedHttpHandler->Aws\{closure}(array('exception' => object(ClientException), 'connection_error' => false, 'response' => object(Response)))
in Promise.php line 203
at Promise::callHandler(2, array('exception' => object(ClientException), 'connection_error' => false, 'response' => object(Response)), array(object(Promise), object(Closure), object(Closure)))
in Promise.php line 174
at Promise::GuzzleHttp\Promise\{closure}(array('exception' => object(ClientException), 'connection_error' => false, 'response' => object(Response)))
in RejectedPromise.php line 40
at RejectedPromise::GuzzleHttp\Promise\{closure}()
in TaskQueue.php line 47
at TaskQueue->run()
in CurlMultiHandler.php line 104
at CurlMultiHandler->tick()
in CurlMultiHandler.php line 131
at CurlMultiHandler->execute(true)
in Promise.php line 246
at Promise->invokeWaitFn()
in Promise.php line 223
at Promise->waitIfPending()
in Promise.php line 267
at Promise->invokeWaitList()
in Promise.php line 225
at Promise->waitIfPending()
in Promise.php line 267
at Promise->invokeWaitList()
in Promise.php line 225
at Promise->waitIfPending()
in Promise.php line 62
at Promise->wait()
in AwsClientTrait.php line 58
at AwsClient->execute(object(Command))
in AwsClientTrait.php line 86
at AwsClient->__call('getItem', array(array('TableName' => 'vapor_cache', 'ConsistentRead' => false, 'Key' => array('key' => array('S' => 'nucleus-test-production:[email protected]|127.0.0.1')))))
in DynamoDbStore.php line 100
at DynamoDbStore->get('[email protected]|127.0.0.1')
in Repository.php line 97
at Repository->get('[email protected]|127.0.0.1', 0)
in RateLimiter.php line 82
at RateLimiter->attempts('[email protected]|127.0.0.1')
in RateLimiter.php line 39
at RateLimiter->tooManyAttempts('[email protected]|127.0.0.1', 5)
in ThrottlesLogins.php line 24
at LoginController->hasTooManyLoginAttempts(object(Request))
in AuthenticatesUsers.php line 39
at LoginController->login(object(Request))
at call_user_func_array(array(object(LoginController), 'login'), array(object(Request)))
in Controller.php line 54
at Controller->callAction('login', array(object(Request)))
in ControllerDispatcher.php line 45
at ControllerDispatcher->dispatch(object(Route), object(LoginController), 'login')
in Route.php line 219
at Route->runController()
in Route.php line 176
at Route->run()
in Router.php line 692
at Router->Illuminate\Routing\{closure}(object(Request))
in Pipeline.php line 130
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in RedirectIfAuthenticated.php line 24
at RedirectIfAuthenticated->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in CreateFreshApiToken.php line 50
at CreateFreshApiToken->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in SubstituteBindings.php line 41
at SubstituteBindings->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in VerifyCsrfToken.php line 76
at VerifyCsrfToken->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in StartSession.php line 56
at StartSession->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in EncryptCookies.php line 66
at EncryptCookies->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php line 105
at Pipeline->then(object(Closure))
in Router.php line 694
at Router->runRouteWithinStack(object(Route), object(Request))
in Router.php line 669
at Router->runRoute(object(Request), object(Route))
in Router.php line 635
at Router->dispatchToRoute(object(Request))
in Router.php line 624
at Router->dispatch(object(Request))
in Kernel.php line 176
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
in Pipeline.php line 130
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in TrustProxies.php line 57
at TrustProxies->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in TransformsRequest.php line 21
at TransformsRequest->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in TransformsRequest.php line 21
at TransformsRequest->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in ValidatePostSize.php line 27
at ValidatePostSize->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in CheckForMaintenanceMode.php line 62
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php line 105
at Pipeline->then(object(Closure))
in Kernel.php line 151
at Kernel->sendRequestThroughRouter(object(Request))
in Kernel.php line 116
at Kernel->handle(object(Request))
in HttpKernel.php line 60
at HttpKernel->Laravel\Vapor\Runtime\{closure}(object(Request))
in Pipeline.php line 130
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in EnsureVanityUrlIsNotIndexed.php line 16
at EnsureVanityUrlIsNotIndexed->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in RedirectStaticAssets.php line 30
at RedirectStaticAssets->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in EnsureOnNakedDomain.php line 25
at EnsureOnNakedDomain->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php line 105
at Pipeline->then(object(Closure))
in HttpKernel.php line 61
at HttpKernel->handle(object(Request))
in httpHandler.php line 58
(1/2) ClientException
Client error: `POST https://dynamodb.eu-central-1.amazonaws.com` resulted in a `400 Bad Request` response:
{"__type":"com.amazon.coral.service#UnrecognizedClientException","message":"The security token included in the request i (truncated...)
in RequestException.php line 113
at RequestException::create(object(Request), object(Response))
in Middleware.php line 65
at Middleware::GuzzleHttp\{closure}(object(Response))
in Promise.php line 203
at Promise::callHandler(1, object(Response), array(object(Promise), object(Closure), null))
in Promise.php line 156
at Promise::GuzzleHttp\Promise\{closure}()
in TaskQueue.php line 47
at TaskQueue->run()
in CurlMultiHandler.php line 104
at CurlMultiHandler->tick()
in CurlMultiHandler.php line 131
at CurlMultiHandler->execute(true)
in Promise.php line 246
at Promise->invokeWaitFn()
in Promise.php line 223
at Promise->waitIfPending()
in Promise.php line 267
at Promise->invokeWaitList()
in Promise.php line 225
at Promise->waitIfPending()
in Promise.php line 267
at Promise->invokeWaitList()
in Promise.php line 225
at Promise->waitIfPending()
in Promise.php line 62
at Promise->wait()
in AwsClientTrait.php line 58
at AwsClient->execute(object(Command))
in AwsClientTrait.php line 86
at AwsClient->__call('getItem', array(array('TableName' => 'vapor_cache', 'ConsistentRead' => false, 'Key' => array('key' => array('S' => 'nucleus-test-production:[email protected]|127.0.0.1')))))
in DynamoDbStore.php line 100
at DynamoDbStore->get('[email protected]|127.0.0.1')
in Repository.php line 97
at Repository->get('[email protected]|127.0.0.1', 0)
in RateLimiter.php line 82
at RateLimiter->attempts('[email protected]|127.0.0.1')
in RateLimiter.php line 39
at RateLimiter->tooManyAttempts('[email protected]|127.0.0.1', 5)
in ThrottlesLogins.php line 24
at LoginController->hasTooManyLoginAttempts(object(Request))
in AuthenticatesUsers.php line 39
at LoginController->login(object(Request))
at call_user_func_array(array(object(LoginController), 'login'), array(object(Request)))
in Controller.php line 54
at Controller->callAction('login', array(object(Request)))
in ControllerDispatcher.php line 45
at ControllerDispatcher->dispatch(object(Route), object(LoginController), 'login')
in Route.php line 219
at Route->runController()
in Route.php line 176
at Route->run()
in Router.php line 692
at Router->Illuminate\Routing\{closure}(object(Request))
in Pipeline.php line 130
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in RedirectIfAuthenticated.php line 24
at RedirectIfAuthenticated->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in CreateFreshApiToken.php line 50
at CreateFreshApiToken->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in SubstituteBindings.php line 41
at SubstituteBindings->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in VerifyCsrfToken.php line 76
at VerifyCsrfToken->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in StartSession.php line 56
at StartSession->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in EncryptCookies.php line 66
at EncryptCookies->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php line 105
at Pipeline->then(object(Closure))
in Router.php line 694
at Router->runRouteWithinStack(object(Route), object(Request))
in Router.php line 669
at Router->runRoute(object(Request), object(Route))
in Router.php line 635
at Router->dispatchToRoute(object(Request))
in Router.php line 624
at Router->dispatch(object(Request))
in Kernel.php line 176
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
in Pipeline.php line 130
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in TrustProxies.php line 57
at TrustProxies->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in TransformsRequest.php line 21
at TransformsRequest->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in TransformsRequest.php line 21
at TransformsRequest->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in ValidatePostSize.php line 27
at ValidatePostSize->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in CheckForMaintenanceMode.php line 62
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php line 105
at Pipeline->then(object(Closure))
in Kernel.php line 151
at Kernel->sendRequestThroughRouter(object(Request))
in Kernel.php line 116
at Kernel->handle(object(Request))
in HttpKernel.php line 60
at HttpKernel->Laravel\Vapor\Runtime\{closure}(object(Request))
in Pipeline.php line 130
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in EnsureVanityUrlIsNotIndexed.php line 16
at EnsureVanityUrlIsNotIndexed->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in RedirectStaticAssets.php line 30
at RedirectStaticAssets->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in EnsureOnNakedDomain.php line 25
at EnsureOnNakedDomain->handle(object(Request), object(Closure))
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
in Pipeline.php line 105
at Pipeline->then(object(Closure))
in HttpKernel.php line 61
at HttpKernel->handle(object(Request))
in httpHandler.php line 58
fichby's avatar

It seems by default it uses dynamoDB for the cache driver. but for some reason it did not set it up correctly for this app.

so if you add

CACHE_DRIVER=database

or

CACHE_DRIVER=array

to your environment variables in vapor ui.

then it seems to work again

DavidLambauerAtAOE's avatar

we are having the exact same problem:

Error executing "GetItem" on "https://dynamodb.eu-central-1.amazonaws.com"; AWS HTTP error: Client error: POST https://dynamodb.eu-central-1.amazonaws.com resulted in a 400 Bad Request response: {"__type":"com.amazon.coral.service#UnrecognizedClientException","message":"The security token included in the request i (truncated...) UnrecognizedClientException (client): The security token included in the request is invalid. - {"__type":"com.amazon.coral.service#UnrecognizedClientException","message":"The security token included in the request is invalid."}

any update on this?

BinotaLIU's avatar
Level 1

Spend several hours, found it's cause by a wrong dynamodb config. In laravel/vapor-core, ConfigureDynamoDb.php filled a dynamodb config if you don't have a stores.dynamodb field in config/cache.php. But the config given by vapor-core is missing a token field, aws returning error about "invalid token."

I found this PR :https://github.com/laravel/laravel/pull/5138 Taylor said that in Vapor, the aws related credential should be keep as empty (null), aws-sdk will automatically retrieve the credential from env that injected by Lambda, so we need to set an empty value on config/cache.php.

In config/cache.php, add following content in stores:

        'dynamodb' => [
            'driver' => 'dynamodb',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
            'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
            'endpoint' => env('DYNAMODB_ENDPOINT'),
        ],

The above code are copied from the laravel/laravel repo. Config files will be cached while deployment using artisan config:cache, so env()s will got a null since AWS credential only available after you call it from lambda. You can keep key and secret as null as well.

        'dynamodb' => [
            'driver' => 'dynamodb',
            'key' => null,
            'secret' => null,
            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
            'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
            'endpoint' => env('DYNAMODB_ENDPOINT'),
        ],

Just keep in mind that if both key and secret are null, aws sdk will retrieve credentials from ENV (and other locations, refer to aws documentation for detail).

cc @davidlambauerataoe

2 likes

Please or to participate in this conversation.