问题标签 [lambda-authorizer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
900 浏览

aws-lambda - React 中 AWS API Gateway 的 CORS 策略错误

我正在尝试设置一个 API 网关来调用另一个将图像上传到 S3 的 lambda 函数。当我使用像 POSTMAN 这样的应用程序时,该功能运行良好,但是当我使用 React 运行浏览器时,我收到以下错误。

在我的 API Gateway 中,我对该方法进行了以下配置

此 API 使用授权者,我使用的是 Auth0 提供的授权者,根本没有编辑代码。

我的授权人调用的函数返回如下响应(例如快乐路径):

这是我第一次同时设置 lambda 函数、授权提供程序和 API 网关,所以我可能会遗漏一些明显的东西。我也尝试添加mode: no-cors到我的 fetch POST 请求中,但是它们仍然以非常相似的方式失败。

通过查看授权方的日志和上传图像的 lambda 函数,我可以看出,它们甚至没有被调用。因此,似乎 CORS 错误与 API 网关有关。

我在一些教程中看到,在他们的 aws 模板 yaml 文件中,他们添加了一个选项AddDefaultAuthorizerToCorsPreflightFalse. 我在 API Gateway 控制台的任何地方都看不到这个。


更新:我已经在自定义授权器关闭的情况下测试了我的功能并且它可以工作。所以我知道 CORS 适用于 options 方法,以及 lambda 函数返回的请求。问题在于自定义授权人。

目前的流程是:

  1. 方法请求 - 身份验证:my-auth-0-authorizer
  2. 集成请求 - 类型:Lambda_proxy
  3. Lambda 函数
  4. 集成响应 - [灰色的代理集成无法配置为转换响应]
  5. 方法响应:HTTP 状态:代理(Access-Control-Allow-Origin在响应标头中)

为了让我的授权人尊重 CORS 配置,我需要做些什么不同的事情或进行更改?


更新:离开我的 API 网关一天后,成功的响应现在正在工作(使用上面提到的流程)。我不确定系统中是否存在故障或意外发生,但它现在正在工作。我仍然遇到 CORS 问题,但现在只有不好的反应。

自定义授权失败return context.fail("Unauthorized");,当这种情况发生时,我的浏览器会收到 CORS 错误。我是否必须为 4XX 响应设置特殊的网关响应?

0 投票
1 回答
414 浏览

aws-lambda - 从 API Authorizer 访问 lambda 函数 (python) 中的 principalId

我有一个工作正常的 API 授权器,但我想在我的 lambda 函数(用 python 编写)中访问获得的 principalId。我在其他答案中看到他们建议使用模板映射,但我根本无法让它发挥作用。我使用以下内容创建了一个简单的映射:

对于 Content-Type: application/json 并尝试使用这两个选项:

  • 当没有模板与请求 Content-Type 标头匹配时
  • 当没有定义模板时(推荐)

但无论如何,当我尝试访问函数上的变量时,它会给我一个 keyError。我还尝试了默认为您提供的映射并通过“上下文”访问它,但我也得到了一个 keyError。

要访问它,我只需使用:

或者

但在这两种情况下,我都会得到 keyError。

更新1: 这是仅供参考的代码,函数和授权者在API中都可以正常工作,唯一的问题是当我尝试在函数中获取principalId时。

拉姆达函数代码:

授权人代码:

0 投票
1 回答
1982 浏览

amazon-web-services - 使用 Lambda 授权器的 AWS Cognito 和 Websocket Api

我在尝试为 WebSocket API 设置 lambda 授权时遇到问题。

无服务器.yml

在前端,我想发送一个 tokenId 或 accessToken 以在授权者中使用

你们可以给我一个示例代码,使用 python 为我的 websocket api 创建一个 lambda 授权器。

我目前正在看这些文章:https ://github.com/awslabs/aws-support-tools/blob/master/Cognito/decode-verify-jwt/decode-verify-jwt.py

0 投票
1 回答
470 浏览

node.js - Lambda 自定义授权,如何返回自定义消息?

我正在为我的服务使用无服务器框架、node.js 和 typescript。我有一个自定义授权器,我从外部服务获取一些数据,并根据该服务的响应,我想在我的 lambda 中返回这样的错误代码。

问题是每次来自授权方的响应是(无论我如何返回错误以及它通过什么错误和状态码):

这是自定义授权者的细节,没有其他东西可以返回,还是可以以某种方式修改响应?

无服务器.yml

这是我的处理程序的简单代码

处理程序.ts

0 投票
1 回答
258 浏览

aws-lambda - 在缓存授权方响应时获取 403

我有两个 lambda 函数(A 和 B),它们使用相同LambdaTokenAuthorizer的配置有以下标识

第一个和随后的请求(对 A)被授权并正确解析,但是在授权方响应被缓存之后和同时对 B 的任何请求(从先前对 A 的请求)都将失败,并显示403和以下消息:

这是预期的行为吗?我在文档中找不到任何关于它的信息。

默认授权方(顺便说一句,默认情况下缓存 300 秒)甚至是一个选项还是反模式?

有没有办法解决这个问题(除了设置ReauthorizeEvery: 0)?

假设如果授权者是共享的,那么它不应该缓存响应是否正确?

编辑:我知道这是“回答”之前,但文档没有说明缓存是如何工作的。如果请求的资源不同,我希望授权者不使用缓存。

0 投票
0 回答
355 浏览

lambda - 具有基本身份验证的 AWS API 网关

架构:通过代理到 lambda 函数的 SNS 发布到 AWS API Gateway。有一个带有 REQUEST 模块设置的 lambda 授权器来授权 api 请求。

当没有授权时,它在 SNS 和 Postman 中都可以正常工作。我可以看到在 cloudwatch 日志中发布的消息。

问题:无法测试 SNS 在启用身份验证时如何将消息发布到 API,即通过在 api 中传递用户名和密码。Postman 在传递 url "https:// username:password @apiurl.com" 时抛出 AuthorizerConfigurationException 错误。

  1. 为 API 网关创建了一个新的 lambda 函数和关联的 lambda 授权器。-> 带有授权标头的请求。
  2. 修改了网关响应以包含 WWW-Authenticate 标头和“基本”值
  3. 当我传递“授权”标头和 base64 用户名:密码编码时,E2E 工作正常。由于我想模拟 SNS 到 API -> 我不能使用授权标头。

问题:

  1. Token vs Request Authorizer 的用例是什么?
  2. 我应该对 API 进行哪些更改以使其接受 URL 中的 USERNAME 和 PASSWORD?我在“AuthorizerConfigurationException”中在 POSTMAN 中收到的错误。
0 投票
0 回答
428 浏览

amazon-web-services - 使用用户池和身份池时的 Lambda 授权方与 IAM 授权方

在 AWS re-Invent 视频中,该解决方案使用 Cognito 池 + 身份池

它还在 API 网关上使用 lambda 授权器来验证令牌并生成策略。我正在阅读 如何使用 Facebook 验证 API Gateway 调用?

它说:要使用联合身份,您将 API Gateway 方法设置为使用“AWS_IAM”授权。您使用 Cognito 创建角色并将其与您的 Cognito 身份池相关联。然后,您使用身份和访问管理 (IAM) 服务授予此角色调用您的 API 网关方法的权限。

-> 如果是这种情况,我们在使用身份池时如何使用 lambda 授权方而不是 IAM 授权方 -> 使用 IAM 授权方和在自定义授权方中生成 IAM 策略有什么区别,正如我在这里看到的那样:

https://github.com/aws-quickstart/saas-identity-cognito/blob/96531568b5bd30106d115ad7437b2b1886379e57/functions/source/custom-authorizer/index.js

0 投票
1 回答
92 浏览

jwt - 在 HTTP API 网关中使用授权方时将 JWT 令牌替换为另一个 JWT 令牌

在我的项目中,我目前有一个以这种方式工作的旧式身份验证:

  1. 有一个客户端(独立)与API service运行在容器中的自定义应用程序对话。
  2. 使用支持 OAuth 和 PKCE 的云身份提供程序 (IdP)。当用户进入登录页面然后被重定向到回调时,它通过通常的登录过程提供其令牌。
  3. API service 充当回调的接收者。因此,它获取身份提供者token-1并将其存储在缓存中。基于此,它向客户端返回一个经过修改但不同的token-2“计算” 。token-1
  4. 一旦客户端需要进行 REST 调用,它就会用token-2JWT 令牌装饰它。调用转到与其匹配的 API 服务,token-1然后可以针对 IdP 进行验证。

我需要摆脱API service云原生机制。我假设 AWS HTTP API 网关可以使用其JWT Authorizer 功能直接与 IdP 集成。遗憾的是,我无法影响必须保持功能的当前遗留流程。

但是,我想在 JWT Authorizer 和客户端端点之间插入一个 Lambda,它将面向客户端的令牌交换为 IdP 令牌(执行API service正在执行的操作)。这可能吗?我该如何处理?

0 投票
2 回答
328 浏览

amazon-web-services - 如何获取 lambda 授权器在 Spring Boot 容器中添加的自定义上下文信息?AWS Apigateway HTTP API

我们正在使用 AWS ECS 服务运行一个容器,我们正在该容器中运行 Spring Boot 应用程序。这是使用 AWS Apigateway HTTP API 公开的。此 AWS Apigateway HTTP API 使用 lambda 授权方进行保护。现在我想在 lambda 授权器中为每个请求添加一些信息,并且我想在 Spring Boot 应用程序方法中访问该信息。我怎样才能做到这一点?

0 投票
0 回答
23 浏览

aws-api-gateway - 通过 AWS ApiGateway 限制客户端对特定 DynamoDB 表的访问

我有一个与从多个 DynamoDB 表读取的 lambda 函数关联的 API 网关。该 API 的调用者应该只能访问一个表,并且应该被阻止访问其他表中的数据。如何限制客户端仅访问特定表?