amazon-web-services - 无服务器 AWS - 是否值得使用自定义授权方(作为 l

嘿,我正在开始使用无服务器框架、apigateway、lambda 和授权程序。

这是我的问题:

  1. 为了验证正确的 JWT token (这似乎是当今无服务器身份验证的最佳解决方案),我需要一个客户端 ID。由于授权方 lambda 无法(?)将请求的任何其他参数传递到 lambda 中( token 本身除外),因此这是一项艰巨的任务。我怎样才能做到这一点?

  2. 既然每次经过身份验证的调用都会调用一个额外的 lambda,我的成本就会翻倍?!可能我在这里误解了什么,但在我看来,实现一种不使用授权方来验证我的 token 的方法更便宜,而且我不需要实现授权方 lambda 本身。

最佳答案

OAuth2 的全部要点是,在授权时,您不关心向您提供 token 的持有者是谁,或者他们使用的是哪个客户端(网络应用程序、Postman 等),只关心 token 是对 token 持有者试图做的任何事情都有效。您相信身份验证已经发生,因为 token 颁发者已完成身份验证。

当您谈论 JWT 中的 aud(audience)(来自评论)时,它可能包含也可能不包含,具体取决于 JWT 发行者,这是为了反射(reflect) JWT 对其有效的服务。

例如,它的值可以是 'myAPIName''myAPIName/test' 甚至 ['myAPIName/test1', 'myAPIName/test2 '].

如果您需要验证单个 aud 声明,您有两种选择,您可以使用不同的 Lambdas 授权不同的 api 路由和方法以及硬编码的 aud 变量,或者您可以获取被调用的 api 的名称并将其映射回某个东西这将匹配 aud 声明。

例如,传入请求的方法 arn 可以在 event.methodArn 中找到。这看起来像 arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/ 可能带有 [{resource}/[{ child-resources}]] 取决于您的实现。通过一些字符串操作,您可以将其映射回观众声明的格式(无论您看起来像什么)。

如果您更愿意使用 api 名称而不是 api 名称,您可以对您使用的任何 sdk 使用 apigateway.getrestapi 方法。可在 JavaScript SDK 中找到有关此方法的文档 here .

JWT 可能有一个 sub(subject claim),同样取决于 JWT 发布者的实现,这可能与您的任何用户(或至少 JWT 发布者知道的用户)相关。除了检查 JWT 的签名之外验证这一点是没有意义的。您可以做的最好的事情是检查该用户是否存在,并且仅当您有权访问与 JWT 颁发者相同的用户数据库时。虽然这可以用来确保 UserA 只能访问 UserA 的数据。同样,您相信持票人拥有 token 这一事实证明他们已经通过身份验证(证明他们是谁)。

我希望这能回答您问题的第一部分。

关于第 2 部分,与在目标 Lambda 中进行授权相比,使用 Lambda 授权方的优势在于缓存。

假设我有一个有效期为一小时的 token ,我每秒调用一次您的 API,持续 30 分钟(1,800 次调用)。您有一个响应缓存时间为 10 分钟的 Lambda 授权方。这意味着您为 1800 个 api 调用检查了 3 次 JWT。

但如果您在目标 Lambda 中验证该 token ,您将进行 1,800 次处理。

关于amazon-web-services - 无服务器 AWS - 是否值得使用自定义授权方(作为 lambda)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58951709/

相关文章:

php - {YOURLS} 将 "shortening"接口(interface)设为私有(pri

angular - ng5- slider : Dragging pointers not movi

flutter - 调用 notifyListeners() 时对话框状态不更新

python - 当 URL 中没有尾部斜杠时,使用 VueJS 单页的 Django 路由会出现意

node.js - 如何对 express-http-proxy 进行单元测试

node.js - Heroku MERN 栈环境变量

node.js - Npm 包安装在 nvm 的错误 Node 版本文件夹中

sql-server - [Microsoft][SQL Server 的 ODBC 驱动程序 17

ksqldb - KSQL 每组选择对应于具有最少时间戳的一行

visual-studio-2019 - InvalidProjectFileException :