aws / aws/serverless-java-container

Unable to invoke lambda when "Authorization scopes" added to JWT Authorizer

Open
#408 2 comments 0 reactions 0 assignees View on GitHub
need feedback
Dominant language
Java
Stars
1.6k
Forks
574
PR merge metrics
No merged PRs in 30d

Description

*Serverless Java Container version*: `eg. 1.5.2`

*Implementations:* `Spring Boot 2`

*Framework version:* `eg SpringBoot 2.4.1`

*Frontend service:* `HTTP API`

*Deployment method:* `SAM`

## Scenario
*Describe what you are trying to accomplish*
I am trying to call invoke lambda via HTTP api with JWT authorizer. call to lambda are failing when i add "Authorization scopes" in the JWT authorizer(on HTTP api)

## Expected behavior
I would expect lambda should be able to be invoke with or without Authorization scopes in JWT authorizer

## Actual behavior
I am trying to call invoke lambda via HTTP api with JWT authorizer. call to lambda are failing when i add "Authorization scopes" in the JWT authorizer(on HTTP api) with error message

```com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token
at [Source: (ByteArrayInputStream); line: 1, column: 3530] (through reference chain: com.amazonaws.serverless.proxy.model.AwsProxyRequest["requestContext"]->com.amazonaws.serverless.proxy.model.AwsProxyRequestContext["authorizer"]->com.amazonaws.serverless.proxy.model.ApiGatewayAuthorizerContext["scopes"])```

but without "Authorization scopes" in the JWT authorizer(on HTTP api) calls were going fine as long JWT is valid

## Steps to reproduce
Create a springboot 2 based AWS lambda with HTTP api and Authorization scope with scopes specified in it.

InputStream of call when Authorization scope is added contains a section with Scopes array but same is null when Authorization scope is not defined in JWT Authorizer in HTTP API

"scopes": [
"b",
"a",
"z",
"y",
"x"
]

InputStream of call when Authorization scope is not added

"scopes": null

## Full log output
*Paste the full log output from the Lambda function's CloudWatch logs*

```
logs
```

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the Spring Boot 2 AWS Lambda behind an HTTP API JWT authorizer with scopes configured through SAM. Read the AwsProxyRequest, AwsProxyRequestContext, and ApiGatewayAuthorizerContext locations named in the exception, then verify that invocation succeeds when the scopes value is an array as well as when it is null.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, java, spring-boot
Domain
api, authentication, cloud
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.