【发布时间】: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 函数名称 已在上一步中创建。
3) 点击 Authorizers (在左侧面板) -> Create New Authorizer -> Given Authorizer Name -> 选择 Lambda 作为类型 -> 选择 Lambda 函数 -> Lambda 执行角色是具有 basix 执行角色策略的 arn -> 有效负载作为令牌 -> 令牌源是 'method.request.header.Authorization' -> 缓存已禁用。
4) 测试授权者并返回正确的策略
5) 我已经部署了 API
6) 尝试使用带有“授权:承载”的 Postman 调用 URL。输出是 { “消息”:“未经授权” }
任何帮助将不胜感激!谢谢。
【问题讨论】:
-
既然您使用的是 Postman,您是否也可以在您的问题中发布 Postman 代码(转到“代码”然后选择 HTTP 或 cURL)?
-
您是否真的使用
Header: Bearer作为您的标题之一,或者这只是一个错字?这就是为什么我建议您在 Postman 中发布您所拥有的内容。 -
@dashmug 这是错字。我在邮递员中使用过
Authorization: Bearer <token> -
根据要求,显示您的邮递员代码,以便我们看到您的有效负载。
-
@dashmug,我得到了解决方案,我会尽快发布解决方案。我误解了 API Gateway 与 Authorizer 的工作方式。与 api gateway 相关的 AWS 文档不好。我在这上面浪费了这么多天。无论如何,谢谢!
标签: lambda authorization jwt aws-api-gateway