【问题标题】:Authentication (AWS Cognito) for an microservice architecture with an angular frontend具有角度前端的微服务架构的身份验证 (AWS Cognito)
【发布时间】:2021-12-13 16:57:02
【问题描述】:

我正在构建一个以 Angular 前端作为 ui 组件的微服务架构。每个微服务都使用 flask-restx 和 pycognito 来保护其路由。前端使用 aws-amplify 对用户进行身份验证。每个微服务都需要一个用于安全路由的有效令牌,该令牌在各自的后端进行验证。在 aws 用户池中,我们创建了多个应用程序客户端。目标是针对 webapp 进行一次身份验证,并使用令牌访问所有微服务后端。我已经尝试在 aws 文档中找到正确的解决方案,但直到现在还没有运气。也许有人可以给我一个提示,什么是正确完成这项工作的最佳实践解决方案。

【问题讨论】:

  • 为什么在 cognito 上需要多个应用程序客户端。每个后端都需要每个应用程序客户端。 r8?
  • 目前,我们实际上为 Web 前端和我们的测试微服务使用相同的应用程序客户端。因此我们可以在前端进行身份验证,并且令牌在后端(微服务)中也是有效的。这也是我问这里的正确方法的原因。

标签: amazon-web-services microservices amazon-cognito amplify


【解决方案1】:

保持简单和愚蠢(亲吻)。 我看不到多个应用客户端的任何用例。

请在微服务端按照以下步骤操作:

  1. Cognito 使用非对称密钥生成 jwt 令牌。
  2. 因此,通过此代码 link 从 Cognito 获取公钥。
  3. 通过公钥 link 解码该 jwt 令牌。
  4. 身份验证将通过上述步骤完成。如果在请求头 jwt.decode 中传递了无效令牌,函数将引发异常 link
  5. 解码后的有效载荷包含sub,并将该子存储在分布式数据库(dynamodb、SQL)中
  6. 可以存储自定义属性并将 Cognito 用户分配到组。这将有助于在微服务端对个人用户进行授权。

我希望这能给你一个继续前进的提示。

【讨论】:

  • 只要我们为微服务和 Web 前端使用相同的应用程序客户端 ID,就可以完全按照您的描述工作(由 pycognito 封装)。那么,我们最终会为所有没有密钥的微服务使用相同的应用程序客户端 ID(Web 前端不允许)吗?您认为如何在没有密钥的情况下直接在各种微服务之间实现安全通信?
  • 啊。我跳过了机器对机器 (M2M) 的通信。
猜你喜欢
  • 2017-05-28
  • 2018-01-19
  • 1970-01-01
  • 2015-09-11
  • 2016-12-22
  • 2018-04-05
  • 2018-01-29
  • 2018-09-24
  • 2017-10-05
相关资源
最近更新 更多