Oauth 2流程:是否应将AWS Cognito的id_token传递到浏览器以进行会话管理?

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

我正在创建一个应用程序,其中:

  1. 我有一个REST API-/ hello
  2. 用户只有在登录后才能访问此API。

为此,我决定使用AWS Cognito并实施Oauth 2.0流程。

现在,当用户尝试访问/ hello时,他们将被重定向到AWS Cognito登录页面。用户登录后,我的服务器端应用程序(包含REST API / hello)可以从AWS Cognito获取id_token和access_token。

我应该将此id_token传递给浏览器,并要求浏览器在访问/ hello REST API时将其发送吗?这对安全性有影响吗?这是正确的方法吗?

或者,在对用户进行身份验证之后,我应该创建一个新的id_token(由我自己的自定义密钥签名),然后将其发送到浏览器吗?用户将在尝试访问/ hello REST API时将其发送回去。然后,我将使用自定义密钥验证id_token是否有效。

id_token的目的是验证用户的会话是否有效并且尚未过期。是否应将id_token用于会话管理?

security spring-security oauth-2.0 amazon-cognito
1个回答
0
投票

因此,目标是避免在React Web UI中使用cookie,而应使用具有无状态后端的令牌。我完全同意这个目标。

OPTION 1

将令牌从Web后端传递到UI,UI可以使用它们来维护客户端会话。这需要通过Ajax调用的Spring端点,并且需要通过cookie对其进行保护。否则,攻击者可以呼叫该端点并获取令牌。

OPTION 2

通过oidc client library而不是Spring Web后端在React应用中进行OAuth登录处理,因此您的UI是纯cookieless SPA。仅将Spring用作OAuth保护的资源服务器。可以通过AWS Cloudfront对HTML / JS文件使用静态内容托管。

我的解决方案

[如果对选项2感兴趣,我有一个演示React应用程序,它可以像这样工作并连接到Cognito。您可以从我的Quick Start Page上自己运行它。

这里是SPA OAuth Code。同时,我的Spring Sample仅充当Rest API,不进行任何Web登录处理。

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