【问题标题】:AWS Lambda, AWS API Gateway and Securing REST endpointsAWS Lambda、AWS API Gateway 和保护 REST 端点
【发布时间】:2019-06-22 10:37:21
【问题描述】:

我正在考虑在 AWS Lambda 和可能的 AWS API Gateway 上将服务实现为一系列 REST 端点。前端将是一个直接调用这些端点的 JS 浏览器客户端,无需中间层。

在我的研究中,我似乎找不到的是,我如何确保可以访问“登录”的人的呼叫?我看到 Lambda 调用是无状态的,所以没有会话数据。我不需要会话数据,除了知道它们已经过身份验证并且在相同情况下被授权访问特定端点。会有一个数据库(DynamoDB 或 RDS),所以如果我需要会话数据,我可以创建它。

有没有办法做到这一点?我意识到我可以在每个 API 调用中传递他们的用户名和密码,但似乎必须有更好的方法。

此外,这可能会在 Java 中实现。我可以使用 Spring Security 吗?

【问题讨论】:

    标签: spring-security aws-lambda


    【解决方案1】:

    我认为您不想在 Lambda 函数中使用 Spring Security。我无法想象它工作得很好,我怀疑它是否会起作用。即使它可以在 Lambda 上运行,它肯定会增加你函数的冷启动时间,而不是你想要处理的。

    向无状态服务提供用户身份验证检查的推荐方法是使用 JWT(JSON Web 令牌)。 Auth0 提供了一篇关于 JWT here 的很好的通用文章,以及使用 API Gateway 和 Lambda 使用 Auth0 的教程 here。即使您不使用 Auth0,我认为第二个教程对于了解如何在 API Gateway 和 Lambda 上执行用户身份验证很有用。

    您还可以使用API Gateway Custom Authorization 函数,它允许您将所有身份验证代码封装在一个 Lambda 函数中,该函数对您的 API 端点起到“看门人”的作用。我建议使用自定义授权 Lambda 函数来验证提交给您的 API 的 JSON Web 令牌。

    【讨论】:

    • 非常感谢马克,这看起来很有帮助。 AWS Cognito 可以用于身份验证吗?我不太关心授权。
    • 是的,Cognito 可以与 API Gateway IAM 身份验证结合使用。
    【解决方案2】:

    为了保护您的 API 网关端点,您可以考虑使用 AWS Signature V4 签署您的请求,使用可以相对容易设置的 Cognito 授权令牌或 Lambda(自定义)授权器。还有其他选择。查看AWS document

    您可以使用 CloudFormation 模板或通过 AWS 控制台设置其中之一。在前端,您可以使用 AWS Amplify 库对请求进行签名。

    查看this article,了解如何保护对 API 网关的访问。

    【讨论】:

      猜你喜欢
      • 2019-02-20
      • 1970-01-01
      • 2019-11-03
      • 2017-12-16
      • 2017-02-23
      • 2017-08-24
      • 1970-01-01
      • 2020-04-21
      • 2020-08-21
      相关资源
      最近更新 更多