AWS Cognito联合身份+程序化API的永久访问密钥

时间:2017-11-20 20:43:21

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

我有一个API服务,我将使用AWS API Gateway和Cognito authorizer + Lambda作为后端进行部署。我们的javascript客户端将使用此服务。此外,它应该作为程序访问的原始端点向最终用户公开。

虽然使用联合身份在js客户端中启用注册/登录非常容易,但我无法找到为用户提供私有访问令牌以直接包含在http头中的方法。

以下是两个身份验证流程,我想最终得到:

js客户端用户的流程:

  1. 用户通过Facebook或Google注册。
  2. 用户验证其身份。
  3. 登录后,用户将转到界面中的“配置文件/ API密钥”部分。
  4. 用户复制访问令牌,可以将其包含在任何http客户端的http请求头中(httpie,curl,语言库等)
  5. admin创建用户的流程:

    1. 管理员创建用户。
    2. 为该用户生成访问令牌。
    3. 管理员将生成的访问令牌传递给用户。
    4. 用户可以将其包含在http标头中以发出请求,如上一个流程所示。
    5. 访问令牌应该是永久性的,并且可以由用户随时重新生成(想想Stripe API访问密钥)。

      这里的要点是消除用户以编程方式开始使用服务的其他步骤。到目前为止,AWS文档中最接近的是developer-authenticated-identities,但用户应该使用AWS sdk。

      完成此任务的一种可能方法是在API网关中使用自定义授权程序而不是Cognito授权程序。自定义授权器可以基于例如实现逻辑。 auth标头名称并决定在Cognito中授权或在数据库中授权用户API访问令牌。我不确定,如果可能的话,主要的缺点是在lambda函数中重新实现Cognito身份验证流程。

      问题是如何使用Cognito或API Gateway完成此类API访问令牌(重新)生成?

1 个答案:

答案 0 :(得分:0)

第一个流程应该可以通过用户池进行。 Cognito用户池现在具有联合功能,您可以使用Facebook / Google进行联合,并根据所使用的流程接收访问令牌/刷新令牌。

对于管理员创建的用户,用户需要在发出令牌之前进行身份验证,但这可以通过使用临时密码创建用户并使用该密码对用户进行签名来实现,之后可以更改并再次登录接收访问/刷新令牌。

刷新令牌用例是可以对Cognito API使用它来接收新的访问令牌。刷新令牌到期时(默认为30天但可配置),用户必须再次进行身份验证。