rest - 具有服务器端身份验证和 Cognito 的无服务器框架

标签 rest authentication aws-lambda amazon-cognito serverless-framework

我已经使用无服务器框架和 APIG、DynamoDB 作为数据存储和 Cognito 实现了各种 REST-API,用于以 Angular2 作为前端的用户身份验证。服务器端的 Cognito 授权者可以轻松保护这些功能。缺点是我必须在我的前端应用程序中集成 AWS SDK,以便首先使用 Cognito 对用户进行身份验证(注册/登录,...)。我也可以使用 AWS_IAM 授权方,但随后我还必须使用 AWS specific signature 对客户端的所有请求进行签名。在将请求发送到 API 网关之前。

现在我想知道是否有可能在服务器端保留身份验证和授权,所以我可以使用像 JSON Web Tokens 这样的开放标准。注册/登录?这将允许我为其他开发人员打开我的 REST-API 不强制他们使用 Cognito 根本。

我知道一种可能性是为我的 lambda 函数实现自定义授权器,但是没有任何稳定的东西可以“开箱即用”使用吗?我发现的大多数示例都是在客户端使用 Cognito 或 IAM auth AWS 签名登录(例如 serverless-stack.com )。

奇怪的是,到目前为止我没有在网上找到任何关于此的有用信息,因为我认为这是 REST API 的典型用例。还是我对 API Gateway + Cognito 有概念上的误解?

最佳答案

我在理解 AWS Cognito 的工作方式以及实现身份验证和授权的可用选项方面遇到了同样的麻烦。不幸的是没有 开箱即用 方法可用于满足您的要求。尽管如此,我们还是希望亚马逊能尽快推出一项功能。

基本上,有 3 个选项可用于实现身份验证。

  • AWS_IAM
  • Cognito 授权方
  • 自定义授权人

  • AWS_IAM

    除了身份验证之外,此方法还可用于使用 IAM 角色或 IAM 用户轻松实现授权。唯一的缺点是你需要发送一个带有 签名的请求。 aws-signature-4 这不是我们在 Auth0 等 IDP 服务中看到的标准方式。

    认知授权者

    此方法符合使用 API 请求发送 JWT token 的期望。您可以在 Cognito 用户池中创建用户,然后使用它进行身份验证并生成 IdToken。但是,此方法只允许您对用户进行身份验证;授权需要在方法级别处理。

    自定义授权人

    此方法可用于编写您自己的身份验证和授权方式。它还有助于消除 API 方法中的编写授权逻辑。理想的解决方案是使用 AWS Cognito 用户池对用户进行身份验证,然后为 IAM 角色生成访问资源的策略文档。
    这是一个例子 AWS cognito userpools JavaScript SDK get user's policy documents .
    另请记住,此解决方案将为您发出的每个请求调用一个额外的 lambda 函数。

    关于rest - 具有服务器端身份验证和 Cognito 的无服务器框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45631460/

    相关文章:

    java - Java 中分离的前端和后端 - Spring MVC 框架

    amazon-web-services - 在 AWS Firehose 中添加故障处理

    amazon-web-services - AWS Lambda 负载

    java - 为什么 REST Controller 返回 404 状态代码?

    java - 将数据发布到 dropwizard 资源?

    security - CAC 智能卡重新验证

    javascript - MSAL Angular 7 : Password Reset Implementation

    c# - 结合表单例份验证(授权)和基本身份验证(消息处理程序)的安全 Web API

    python - 迭代字典并获取日期时间列表中最旧的值

    .net - 我可以在没有 .NET 库的情况下使用 Windows 身份验证使用 WCF REST 服务吗?