amazon-web-services - 如何从 AWS HTTP API-Gateway 获取 401 状态码
问题描述
我正在使用 lambda 函数作为我的 HTTP API-Gateway 的身份验证器,我在 Simple Response 中发现了三种情况-
- 当 "isAuthenticated" = True --> 200 并且请求通过
- 当 "isAuthenticated" = False --> 403 并且它返回 Forbidden
- 当标头中缺少身份验证密钥时-> 401
我想在“isAuthenticated”= False 时返回 401,或者找到一种从 API-Gateway/授权方发送 401 错误代码的方法,在 REST API-Gateway 中,这可以通过使用“未授权”引发错误/异常来实现。但这对于 REST API-Gateway 是不可能的。
我已经尝试了几乎所有方法来从简单的以及策略 HTTP API-Gateway 发送响应,例如引发异常/错误/回调甚至返回 null。
当用户未通过身份验证时,我有没有办法返回 401?StackOverflow 上有很多类似的问题,但主要是针对 REST API-Gateway,我的问题是针对 HTTP API-Gateway 的。
解决方案
我迟到了(在这里偶然发现了其他东西),但简而言之,答案是“不,你不能” 。
HTTP API 专门设计得更简单,配置更少,因此返回所需响应代码的自由度更低。
对于遇到这个问题的人来说,这里有更多关于简单 lambda 授权器如何为 HTTP API(而不是 REST API)工作的信息。
使用 HTTP API,使 lambda 授权者具有简单的响应格式(不是 IAM)。并从您的函数中返回以下 json:
return {
"isAuthorized": false/true,
"context": {
"somethingLikeUserIdOptional": 123,
}
}
返回isAuthorized = false
, 将导致 HTTP 网关自动返回一个403 (Forbidden)
给调用者。为您的授权者省略所需的身份源(参数/标头)将返回 a401 Unauthorized
而不会执行您的 lambda。显然isAuthorized = true
返回 a 200 Success
,并使用您放入上下文中的内容执行 API 路由的下一个 lambda。
请参阅此处了解更多信息:Lambda 授权者 AWS Docs
有关返回的状态代码和演练的详细信息,请参阅此处:AWS 博客中的 AWS 演练
推荐阅读
- sql - 雪花存储过程 CTE
- python - 导航到“url”,等到“加载”-python playright 问题
- html - 我想制作自定义折线 html 图表
- reactjs - 如何在 ReactJS 中映射对象
- google-cloud-platform - 如何使用谷歌部署管理器和谷歌云构建使用多项目多环境部署
- javascript - 如何创建添加角色 =“演示文稿”的脚本
- java - 如何使用 JPA 和 Mongo 查询 DSL 配置
- php - 在 Laravel 8 的单元测试中调用未定义的方法 Tests\Unit\TopPageTest::get()
- frontend - 如何为 cypress 设置 Prerender?
- javascript - 在 Angular 项目中包含外部 JS 文件不能正常工作