【发布时间】:2020-04-23 15:17:08
【问题描述】:
我已经为 API 网关实现了一个自定义的“REQUEST”类型授权器,它验证在“Authorization”标头中传递的 JWT 令牌。我已经独立测试了 lambda,它按预期工作。我还将授权人附加到我的路由中,我可以在 AWS 控制台中对其进行测试 - 再次,一切似乎都正常(见图):
但是,当我尝试使用 Authorization 标头中的令牌调用端点时,我总是收到 UNAUTHORIZED 响应:
{
"errors": [
{
"category": "ClientError",
"code": "UNAUTHORIZED",
"detail": "Unauthorized",
"method": "GET",
"path": "/cases",
"requestId": "004eb254-a926-45ad-96a5-ce3527621c81",
"retryable": false
}
]
}
根据我收集到的信息,API 网关从不调用我的授权器,因为我在其 cloudwatch 中看不到任何日志事件。我能够启用我的 API 网关的 cloudwatch 日志记录,我看到的唯一日志信息如下:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| timestamp | message |
|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1578275720543 | (dac0d4f6-1380-4049-bcee-bf776ca78e5c) Extended Request Id: F2v9WFfiIAMF-9w= |
| 1578275720543 | (dac0d4f6-1380-4049-bcee-bf776ca78e5c) Unauthorized request: dac0d4f6-1380-4049-bcee-bf776ca78e5c |
| 1578275720543 | (dac0d4f6-1380-4049-bcee-bf776ca78e5c) Extended Request Id: F2v9WFfiIAMF-9w= |
| 1578275720544 | (dac0d4f6-1380-4049-bcee-bf776ca78e5c) Gateway response type: UNAUTHORIZED with status code: 401 |
| 1578275720544 | (dac0d4f6-1380-4049-bcee-bf776ca78e5c) Gateway response body: {"errors": [{"category": "ClientError","code": "UNAUTHORIZED","detail": "Unauthorized","method": "GET","path": "/cases","requestId": "dac0d4f6-1380-4049-bcee-bf776ca78e5c","retryable": false }]} |
| 1578275720544 | (dac0d4f6-1380-4049-bcee-bf776ca78e5c) Gateway response headers: {} |
| 1578275720544 | (dac0d4f6-1380-4049-bcee-bf776ca78e5c) Gateway response type: UNAUTHORIZED with status code: 401 |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
此时我完全卡住了,不知道如何进一步调试。我假设某些东西必须配置错误,但我能找到的日志信息没有给出任何问题的迹象。我还在下图中粘贴了我的授权人配置的副本:
【问题讨论】:
-
请发布您的授权人代码。我认为这就是问题所在。
-
@ArunK 我已将我的授权处理程序添加到帖子中,但我很困惑代码如何成为这里的问题。正如我在原始帖子中所说,当我将授权器作为 lambda 调用时以及当我从 API 网关授权器控制台对其进行测试时,授权器工作,并且当我通过 Curl 或邮递员向端点发出请求时,它永远不会被调用。
-
您是否使用无服务器框架。我不这么认为?
-
您是否将授权者 lambda 配置为任何 api 的授权者
-
我正在使用无服务器框架,但我正在手动部署共享授权方,以便绕过此处的限制:serverless.com/framework/docs/providers/aws/events/apigateway/… 如果您认为相关,我可以发布 cloudformation。我已将授权方附加到我的许多端点,它们都表现出相同的行为。
标签: node.js amazon-web-services aws-lambda aws-api-gateway