【发布时间】:2019-01-16 02:53:12
【问题描述】:
使用错误参数中的字符串 Unauthorized 从 Lambda 授权方调用 Lambda 回调函数会返回带有正文的 401 响应:
{ "message": "Unauthorized" }
尝试在响应中使用任何其他字符串会导致响应:
{ "message": null }
如果您在回调的结果参数中返回拒绝策略文档,您将收到 403 响应,类似于:
{ "message": "Unable to access resource with an explicit deny" }
环顾四周后,您似乎需要配置网关响应以从 Lambda 授权方返回自定义响应,我已经为 403 响应工作,但无法弄清楚如何为 401 执行此操作。
对于 403,我使用模板创建了网关响应:
{\"message\":\"$context.authorizer.stringKey\"}
然后在结果对象上我设置如下
ResultObject.context.stringKey = 'My custom response'
这有效并记录在here。
但是,对于 401,因为我没有返回策略文档,所以我不知道如何使用自定义响应。我创建了与 403 相同的网关响应,但如果我在错误参数中使用任何字符串(“未授权”除外)点击回调,我会收到空消息。我无法返回结果参数,因为这需要是包含策略文档的响应结构。
关于如何使用 401 返回自定义响应有什么想法吗?
【问题讨论】:
-
您想在业务规则方面实现什么目标?
-
我们要根据AuthorizationToken是否不是我们期望的结构、不是我们签名、过期等等返回不同的响应消息
-
那么你不应该这样做!因为您可能会向攻击者透露重要信息。在这种情况下,您的应用程序应该将用户重定向到登录屏幕,仅此而已。然后在用户使用另一个端点登录时重新生成令牌,如果你愿意,这个令牌生成端点可以提供更详细的消息,但我会限制在任何情况下用户/密码不匹配或类似的东西。
-
感谢您的建议,但我是否应该针对所有场景返回相同的响应,并使用除“未经授权”之外的不同消息,这可能吗?
-
不,我认为不可能。
标签: amazon-web-services aws-lambda aws-api-gateway lambda-authorizer