AWS API Gateway 自定义授权方给予例外
Posted
技术标签:
【中文标题】AWS API Gateway 自定义授权方给予例外【英文标题】:AWS API Gateway Custom Authorizer giving exception 【发布时间】:2018-03-21 12:35:32 【问题描述】:我必须使用 AWS API Gateway 和 Lambda 创建自定义授权。
我遵循了offical doc 上提到的所有步骤。但最后网关是给Unauthorized
以下是我遵循的步骤。
1) 创建了 lambda 函数(根据 github 上可用的蓝图)。它将以正确的格式返回 policyDocument。这已经
使用以下测试数据进行测试 -
"type": "TOKEN",
"methodArn": "arn:aws:execute-api:us-west-2:xxxxxxxxxx:fgdfgdfg/null/GET/",
"authorizationToken": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEyMzQ1Njc4OTAiLCJuYW1lIjoiSm9obiBEb2UiLCJhZG1pbiI6dHJ1ZX0.x8R6LPytDMrPuUBY71skyLBUrkme86DhioN3L7LY_-0"
2) 创建 API。选择“创建方法”-> 获取-> 将集成类型选择为“Lambda 函数”-> 选择区域和 lambda 函数名称 已在上一步中创建。
Refer this. Integration request Integration response3) 点击 Authorizers (在左侧面板) -> Create New Authorizer -> Given Authorizer Name -> 选择 Lambda 作为类型 -> 选择 Lambda 函数 -> Lambda 执行角色是具有 basix 执行角色策略的 arn -> 有效负载作为令牌 -> 令牌源是 'method.request.header.Authorization' -> 缓存已禁用。
Refer this
4) 测试授权者并返回正确的策略
5) 我已经部署了 API
6) 尝试使用带有“授权:承载”的 Postman 调用 URL。输出是 “消息”:“未经授权”
任何帮助将不胜感激!谢谢。
【问题讨论】:
既然您使用的是 Postman,您是否也可以在您的问题中发布 Postman 代码(转到“代码”然后选择 HTTP 或 cURL)? 您是否真的使用Header: Bearer
作为您的标题之一,或者这只是一个错字?这就是为什么我建议您在 Postman 中发布您所拥有的内容。
@dashmug 这是错字。我在邮递员中使用过Authorization: Bearer <token>
根据要求,显示您的邮递员代码,以便我们看到您的有效负载。
@dashmug,我得到了解决方案,我会尽快发布解决方案。我误解了 API Gateway 与 Authorizer 的工作方式。与 api gateway 相关的 AWS 文档不好。我在这上面浪费了这么多天。无论如何,谢谢!
【参考方案1】:
您的令牌来源是“授权”,但在您的有效负载中您以“授权令牌”发送它。
【讨论】:
在我的问题中,如果您在我的问题 (pix.toile-libre.org/upload/original/1507621904.png) 中看到截屏视频,我已将“授权”映射到正文映射模板中的“授权令牌”。所以最终它只会发送“authorizationToken”。【参考方案2】:嗯,AWS 很棒。我从一个月以来一直在玩 API Gateway。 API Gateway 的文档确实需要一些更新。我体验过使用 API Gateway 需要大量的反复试验方法。看来,文档(特别是 API 网关的自定义授权器)是通过假设开发人员知道为 API 网关构建授权器所需的东西而编写的。
我不知道是我遗漏了什么还是太复杂而无法理解自定义授权人的文档。经过调查(相当长的时间),我发现它的确切工作原理。我将尝试在下面为可能觉得这很有用的人解释它。
自定义授权者的概念非常简单。当我们创建授权方(基于令牌或基于请求)时,来自客户端的请求将首先执行授权方(Lambda 函数),然后,如果请求被允许,API 网关会将请求转发到上游(或端点 URL)。而已!这里没有更多的混乱。
这是我对文档的期望。那里有可用的视频,但由于添加了新的很棒的功能,它们需要更新。(如基于请求的授权者)
我通过比较 AWS API Gateway 和 Kong API Gateway 来构建 POC。相信我,我只需要一两天来完成 Kong 的设置,而 AWS API Gateway 的设置则需要 8-10 天。无论如何谢谢!
【讨论】:
以上是关于AWS API Gateway 自定义授权方给予例外的主要内容,如果未能解决你的问题,请参考以下文章
如何为 AWS API Gateway 自定义授权方配置 CORS?
API 创新不会触发 AWS API Gateway 的基于自定义请求的 lambda 授权方
如何从 AWS API Gateway 自定义授权方检索 Spring Boot 中的上下文对象?