使用Cognito进行REST API身份验证

NRa*_*Raf 8 authentication rest amazon-cognito aws-lambda aws-api-gateway

我希望使用API​​ Gateway + Lambda + Cognito用户池来构建一个简单的REST API.

API将以两种方式使用.第一个是支持基本的Web应用程序(托管在CloudFront + S3上).Web应用程序的身份验证使用托管的Cognito登录/注册流程,并且工作正常(使用API​​网关设置来使用用户池身份验证器).

第二种方法是让客户使用REST API与系统进行通信.

例如,客户端可能使用Web应用程序配置工作流,然后使用API​​来调用该工作流.

验证API以与后端服务一起使用的推荐方法是什么?

传统上,我希望为此目的使用API​​密钥+秘密令牌.我在API网关界面中创建API密钥没有问题,但我无论如何都看不到将其链接到特定用户,也看不到任何在API密钥旁边指定秘密令牌的方法.

假设以上是可能的,我将如何设置它以便我可以使用基于JWT的Web应用程序方法和API密钥+秘密令牌供客户使用.

编辑:此外,我注意到应用程序客户端有一个ID和一个秘密.它们是否打算用于第三次基于API的身份验证(类似于其他系统如何使您为API访问创建应用程序)?我有点怀疑,因为每个用户池有25个限制,虽然这是一个软限制......

Zac*_*ach 6

我自己一直在寻找这个问题的答案,我的搜索使我想到了你的问题。假设您想使用众所周知的密钥/秘密方法,我将根据我的研究为您提供最佳答案。也许其他人可以提供更好的方法。

基本上,方法是:

  1. 您的 REST API 帐户只是(可能是独立的)用户池中的 Cognito 用户
    • API账户的管理是从后端完成的
    • 用户名和密码将是 API 密钥和秘密,以管理方式创建(请参阅 Admin* 操作),并且可以是您想要的任何格式(在 Cognito 限制内)
  2. REST API通过 Cognito JWT 令牌授权
  3. API 帐户密钥和秘密仅用于检索或刷新令牌
    • 这要求 REST API 具有一组端点以支持使用帐户密钥和机密的令牌检索和刷新
    • 根据您设置 Cognito 刷新间隔的时间长短,您可以要求 API 帐户从非常频繁到几乎从不提交其密钥/秘密凭证

构建 REST API 授权以使用 Cognito 令牌将允许您将 REST API 直接与API Gateway 对 Cognito 的支持集成。

我认为这整个事情中最令人头疼的是你必须创建支持部分,例如注册用户请求 API 帐户和管理这些帐户,以及一些额外的辅助 REST 端点用于令牌交换。此外,客户端必须跟踪密钥/秘密和令牌,并添加客户端逻辑以了解何时提供令牌或凭据。