使用 Cognito 和 Spring boot 进行身份验证

问题描述 投票:0回答:1

我正在使用 Spring boot 和 AWS Cognito 构建身份验证系统,但我不想使用 AWS 托管 UI。我将使用 React 和 Cognito sdk 实现我的自定义 ui。我想到的流程是:

  1. 从 React 的 Cognito 获取代币
  2. 发送到Spring Boot
  3. 在 Spring Boot 中验证令牌
  4. 授予 API 访问权限

但我不太确定使用自定义用户界面是否值得这么麻烦。这种系统的最佳实践是什么?我也希望获得一些类似架构或模式的推荐。

spring amazon-web-services spring-boot amazon-cognito
1个回答
0
投票

首先,我更多的是后端/devops 开发人员,我的答案是基于我与包括移动应用程序团队在内的多个前端团队合作的经验。我之所以得出这个结论,主要是因为我的“前端”客户引导我找到了这个解决方案,但我承认这可能不是最好的解决方案。主要问题通常与您在这里提出的问题有些相似; “我如何不使用 Cognito 的 X 或 Y 功能?Cognito 是什么?如何将 Congito 融入我的框架?这很烦人,救命!”。在反复研究多个项目之后,我得出了结论,现在通常总是说:“我听到了,别担心 Cognito,你甚至不知道它的存在”。

以下是一些高级实施点:

  1. 不要在 UI/客户端使用 Cognito SDK,并为此过程使用完善的身份验证框架。这将由你决定。

  2. 设置 Cognito 应用程序客户端并将其 ID 分发给前端开发人员,他们将使用这些 ID 与您的后端进行交互。

  3. 在 Spring 端添加一个“直通”登录端点,该端点将仅使用 Cognito 进行身份验证并将响应返回到 UI。如果需要,您可以对刷新令牌执行相同的操作。请注意,这可能需要 Spring Boot 端的 Cognito Admin SDK 来调用 Cognito。如果您使用 SSO,这是可能的,您只需要在重定向游戏中促进或引导 UI。

  4. 使用 Cognito 为您的 AWS 区域提供的 JWK 端点,将后端设置上的 Spring Security 配置作为 oauth2 资源服务器。当然,您必须将您的登录端点列入白名单。您可以找到一些资源,向您展示如何设置此功能的示例,但实际上,它是设置的大致范围:

issuer: ${cognito-user-pool-id}${cognito.user-pool-domain}
spring.security.oauth2.resourceserver.jwt.jwk-set-uir: ${issuer}/.well-known/jwks.json

*其中池域类似于

https://cognito-idp.{region}.amazonaws.com

因此,这里的主要思想是,您的“前端”客户端完全不受 Cognito 细微差别的影响。根据您执行此操作的情况,如果需要,您也可以从 Cognito 迁移。这使您的客户能够仅使用其选择的客户端生态系统附带的经过严格审查的身份验证库。诚然,这有点“工作”;然而,根据您团队的知识和目标,您可能会用“与 Cognito 战斗”来换取对流程的更多控制,而无需过多牺牲 Cognito 提供的核心安全功能。

© www.soinside.com 2019 - 2024. All rights reserved.