Cognito - 如何在与客户端从(通过放大)获得令牌的子域不同的子域上对 nodejs 后端的客户端进行身份验证?

Posted

技术标签:

【中文标题】Cognito - 如何在与客户端从(通过放大)获得令牌的子域不同的子域上对 nodejs 后端的客户端进行身份验证?【英文标题】:Cognito - How to authenticate client in nodejs backend on a different subdomain than the one the client obtained the token from (through amplify)? 【发布时间】:2021-08-20 18:59:12 【问题描述】:

我在https://mysite.co/auth/ 中有一个身份验证流程,它是使用 Amplify 实现的(https://mysite.co/ 中的应用基于 Next.js)

当用户成功认证后,他从 Amplify 获得一个 Cognito 令牌,然后被重定向到 https://app.mysite.co/(这是纯 javascript 前端和 Node.js 后端)

如何使用从https://mysite.co/auth/ 获得的 Cognito 令牌对https://app.mysite.co/ 中的用户进行身份验证?

我假设这是可能的,例如使用本地存储,但没有身份验证经验,并且在寻找有关如何执行此操作的好指针时迷失了方向。

【问题讨论】:

我不确定这是否是最佳实践,将令牌存储在会话存储中以供以后使用可能会解决您的问题。 【参考方案1】:
    将 Cognito 切换为使用 cookie based auth,并将您的域设置为 mysite.co,不带任何路径或子域,以便可以跨您拥有的子域使用。

 cookieStorage: 
  domain: 'mysite.co'// 'localhost' for dev - no port
 

Cognito 目前不支持安全 cookie - 但是,它并没有什么不同,因为唯一支持的其他方法是本地存储,并且仍然可以通过 JS 访问数据。 p>

如果您在 JWT 中设置大量额外信息,您可能会达到 cookie 大小限制(4096 字节限制)。标准 Cognito JWT 约为 1800 字节

    Imponent 客户端上的跨域本地存储以读取其他子域的本地存储 - 并非微不足道且特定于案例。我不知道这对于 Cognito 是否可行。 Here is an article 讨论使用 post 消息 - 这种方法是 hacky。

    将您的身份验证服务移至 app.mysite.co/auth 下。大多数 JS 框架(如 React)允许您在特定路径/路由 (/auth) 下拥有单独的实例。

    app.mysite.co 和除/auth 之外的所有路径都是app-1

    路径 app.mysite.co/auth 及其所有子路径都是 app-2 (auth)

【讨论】:

以上是关于Cognito - 如何在与客户端从(通过放大)获得令牌的子域不同的子域上对 nodejs 后端的客户端进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何安全地使用 AWS 放大

如何从 Cognito 身份池提供的身份凭证访问用户数据?

如何在放大中捕获来自 aws cognito pre signup lambda 的错误?

如何修改 AWS Cognito JWT Tokens,我们正在使用 NodeJS 技术问题

从 Cognito 收到 JWT Token 后如何存储?通过 Cognito 托管 UI 登录

具有授权的 AWS Cognito 用户(如何从应用程序将用户添加到用户组?)