在API Gateway中使用AWS Lambda Authorizer

时间:2019-08-23 10:03:16

标签: amazon-web-services aws-lambda aws-api-gateway

我的WEB API托管在Docker中。我的Angular客户端将发送JWT令牌以访问这些API中的任何一个。我想在调用请求的API客户端之前利用AWS API Gateway功能添加授权检查。从docs中,我们可以利用Lambda Authorizer概念来实现这一目标。但是话又说回来,尽管我可以使用Lambda Authorizer来提供一个可以验证用户身份的DOT NET CORE API。

  1. 我的Lambda网关对我的情况有意义吗?
  2. 如果这样做,lambda授权器的输出将是什么?一个简单的true / false表示令牌有效或无效?

我看到这就是响应应该/可能看起来像的样子。就我而言,这应该如何翻译

Traceback (most recent call last):
  File "D:/python/test6.py", line 7, in <module>
    "password": new_lines[1]})
IndexError: list index out of range
  1. 执行Lambda Authorizer后,API网关中应该发生什么?谁调用了客户要求的我的实际API?

4 个答案:

答案 0 :(得分:1)

如果要使用Lambda授权器,则需要返回AllowDeny策略。

这实际上授予了API网关调用底层目标的权限。我知道乍一看听起来很奇怪,但这就是它的工作原理。将Allow策略想像为true返回语句(匹配凭据),而Deny策略更像是false返回语句(凭据不匹配) /根据您的规则等,权限不足。

为使您踏上第一步,您只需复制/粘贴docs上可用的代码,然后根据自己的喜好修改身份验证方式(文档显示的示例使用带有Allow或{ {1}}值,这绝对不是您想要的值,仅是出于示例的目的。

因此,通过列举所有答案返回您的问题:

  1. 是的,但是它被称为Lambda授权者,而不是Lambda网关
  2. 分别针对有效/无效令牌的DenyAllow策略。
  3. 如果Lambda授权器以Deny策略响应,则它将调用目标(可以是Lambda函数,SNS主题,HTTP端点-这可能是您的情况-依此类推)。授权者将仅充当拦截器,并决定是否将呼叫代理到目标。

答案 1 :(得分:0)

根据我对问题的理解,您想验证正在调用API的用户。

您可以使用已经提到的所有方式来做到这一点。 使用Lambda Authorizers,您将获得200或403代码,不是true false。您可以点击以下链接来设置授权者:

https://blog.codecentric.de/en/2018/04/aws-lambda-authorizer/

您还可以使用AWS Cognito来管理用户,这将大大简化您的工作。

答案 2 :(得分:0)

Amazon Cognito可让您快速轻松地将用户注册,登录以及访问控制添加到您的Web和移动应用程序。 Amazon Cognito可以扩展到数百万用户,并支持通过SAML 2.0与社交身份提供商(例如Facebook,Google和Amazon)以及企业身份提供商进行登录。

使用Cognito的优点: 托管服务,可减少实施/监控/扩展的组件

可通过门户,CLI和模板轻松配置

支持多种身份验证流程(客户端,服务器端,OAuth2,自定义)

在身份验证/注册事件上支持Lambda触发功能

使用JWT签名的令牌,这些令牌可以直接在会话cookie中传递给客户端,并用于验证请求并在相关的API调用中传递,因此可以通过您的堆栈无状态使用单个身份验证/授权方法。组成员身份由访问令牌提供用于授权(例如,“ Admin”组中的用户可以执行管理功能)

句柄:

  • 用户组成员身份和属性存储

  • 电子邮件/电话验证

    • 用户邀请

    • 登录/注册UI表单(可自定义)

    • 密码重置

缺点:

  • 对身份验证/授权的控制较少(UI /流定制的限制)
  • 锁定的潜力(无法使用迁移密码导出用户)
  • Amazon Cognito具有三种类型的授权者
  • Amazon Cognito用户池-用户池授权者。
  • Amazon Cognito联合身份-AWS IAM授权。
  • 自定义Lambda身份提供程序-自定义Autorizer

enter image description here

答案 3 :(得分:0)

您只需将dotnet核心api添加到“集成请求”选项卡,选择“集成类型”作为HTTP,然后在Endpoint URL字段中提及dotnet核心api