【问题标题】:AWS Cognito federated identities + permanent access key for programmatic APIAWS Cognito 联合身份 + 编程 API 的永久访问密钥
【发布时间】:2018-05-04 04:27:19
【问题描述】:

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

虽然使用联合身份在 js 客户端中启用注册/登录非常容易,但我不知道如何为用户提供私有访问令牌以直接包含在 http 标头中。

这里有两个身份验证流程,我想最后得到:

js客户端用户流程:

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

管理员创建用户的流程:

  1. 管理员创建用户。
  2. 为该用户生成访问令牌。
  3. 管理员将生成的访问令牌传递给用户。
  4. 用户可以将其包含在 http 标头中以发出请求,就像之前的流程一样。

访问令牌应该是永久性的,并且可以由用户随时重新生成(想想 Stripe API 访问密钥)。

这里的重点是消除用户以编程方式开始使用服务的额外步骤。到目前为止,AWS 文档中最接近的内容是 developer-authenticated-identities,但无论如何用户都应该使用 AWS sdk。

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

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

【问题讨论】:

  • 首先,出于安全原因,来自 Cognito 的访问令牌不应该是永久性的。不确定到底是什么问题。人们总是可以编写一个脚本来向 Cognito 请求令牌并以编程方式将其包含在 HTTP 请求中。您的意思是用户在登录一次后就再也不需要登录了吗?如果是这样,您可以随时使用刷新令牌来获取新令牌

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2021-12-25
    • 2018-11-07
    • 2016-12-29
    • 2023-03-28
    • 2017-06-08
    • 2019-02-09
    相关资源
    最近更新 更多