integration of lambda authorizer to api gateway

0

I have a lambda configured to run as an HTTP server. Following example event is passed to it,

{
  "version": "2.0",
  "routeKey": "$default",
  "rawPath": "/path/to/resource",
  "rawQueryString": "sale_code=1&service=Dashboards&aws_account_id=021211401397&authorization=eyJeb21cL2FwLXNvdXRoZWFzdC0xX0syNU9jOE5VNiIsImNvZ25pdG86dXNlcm5hbWUiOiJjYTdjZDQyZi00OTgzLTQ2YzgtODZmNy1mYmY1N2FiOTJkZGMiLCJvcmlnaW5fanRpIjoiZDA2MGRmYWQtNjNiOC00ZTNjLTgzYjEtZDg2NjNiZDQ3MDZkIiwiYXVkIjoiMjNpcjNjYmpvaG8ydXA1dXJuamVtcXIwNm8iLCJldmVudF9pZCI6ImRkNmE5MzBjLTZiM2EtNGQzNi04OWYyLTZiY2IyOTVkZmE0ZiIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNzExMjc3NDE4LCJuYW1lIjoiSmVoYW4iLCJleHAiOjE3MTEyODEwMTgsImN1c3RvbTpyb2xlIjoiQWRtaW4iLCJpYXQiOjE3MTEyNzc0MTgsImZhbWlseV9uYW1lIjoiS3VsYXRoaWxha2EiLCJqdGkiOiJjMGMxMTI4My1lZDcwLTRkN2QtYWY5My1mNzJmMDBjNWM3ZmMiLCJlbWFpbCI6ImplaGFuQHRlYWFpLmFpIn0.gC_1PkwHHQNlnMgljXmnTolI9ZywePsE2FqFcY8zKcaFWuvZwRN-cxzGlbT_aOLeTxF9ZeSzNzQHwQ_mBcTe7KBeZH4CI1ODvE5Fpg0UahE-lQIcXN8g9k9Mmd6JvQ6zRagAqIqm_4ct3yDExUooUwEOxmln3JOCpttuARFJppRydNDqdZ61kB_QGCl5g-n9ulvO83MNJZJHxIJVrI5FT6qfpTMBAmvRwX2GoFSSfQ74Ai1lTm7ue-PF27H2LmHPuksqnl1jp4QVfn_XJR7g_VqXi1MecoV349RDDIw4hovyLcWc9nEn-waSztkzgcMQ7gFv4TRLAUzGxnMJCXKlZw",
  "cookies": [
    "cookie1",
    "cookie2"
  ],
  "headers": {
    "Header1": "value1",
    "Header2": "value1,value2"
  },
  "queryStringParameters": {
    "parameter1": "value1,value2",
    "parameter2": "value"
  },
  "requestContext": {
    "accountId": "123456789012",
    "apiId": "api-id",
    "authentication": {
      "clientCert": {
        "clientCertPem": "CERT_CONTENT",
        "subjectDN": "www.example.com",
        "issuerDN": "Example issuer",
        "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
        "validity": {
          "notBefore": "May 28 12:30:02 2019 GMT",
          "notAfter": "Aug  5 09:36:04 2021 GMT"
        }
      }
    },
    "authorizer": {
      "jwt": {
        "claims": {
          "claim1": "value1",
          "claim2": "value2"
        },
        "scopes": [
          "scope1",
          "scope2"
        ]
      }
    },
    "domainName": "id.execute-api.us-east-1.amazonaws.com",
    "domainPrefix": "id",
    "http": {
      "method": "GET",
      "path": "/",
      "protocol": "HTTP/1.1",
      "sourceIp": "192.168.0.1/32",
      "userAgent": "agent"
    },
    "requestId": "id",
    "routeKey": "$default",
    "stage": "$default",
    "time": "12/Mar/2020:19:03:58 +0000",
    "timeEpoch": 1583348638390
  },
  "body": "eyJ0ZXN0IjoiYm9keSJ9",
  "pathParameters": {
    "parameter1": "value1"
  },
  "isBase64Encoded": true,
  "stageVariables": {
    "stageVariable1": "value1",
    "stageVariable2": "value2"
  }
}

I have integrated this lambda as my lambda authorizer but when I test it I get this error

"statusCode": 422, "headers": {"content-length": "347", "content-type": "application/json"}, "multiValueHeaders": {}, "body": "{\"detail\":[{\"loc\":[\"query\",\"authorization\"],\"msg\":\"field required\",\"type\":\"value_error.missing\"},{\"loc\":[\"query\",\"aws_account_id\"],...

How can I fix this?

1개 답변
0
수락된 답변

Not sure I completly understand what you are trying to do. If your function is a web server, it is not the same as a Lambda authorizer. A Lambda authorizer is a way to implement custom authorization mechanisms, and there is a specific response format for it.

profile pictureAWS
전문가
Uri
답변함 2달 전
profile picture
전문가
검토됨 2달 전
  • I hope this clarifies what I tried to say. It's just a server accepting an HTTP request having few parameters so it does the custom validation and sends the response whether authenticated or not. If I send the same request the lambda response is

    { "statusCode": 200, "body": "{"status":200,"msg":"authorization failed","isAuthorized":false}", "headers": { "content-length": "64", "content-type": "application/json" }, "isBase64Encoded": false }

  • API Gateway expects a specifc response format from a Lambda authorizer. You can find how it should look for REST API here and for HTTP API here. As you can see, you function's response does not match any of these,

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인

관련 콘텐츠