我正在处理用户在使用后没有明确退出 Web 应用程序的问题,这对于用例来说不够安全。它是一个带有 AWS Amplify 和 Cognito 的 React 应用程序。
我计划通过跟踪数据库中的会话来做到这一点(我可以使用在 PostAuthentication_Authentication 或 TokenGeneration_RefreshTokens 事件上用 Go 编写的 Cognito Lambda 触发器捕获会话的开始或刷新),并在一段时间不活动后使用 GlobalSignOut 使会话到期,但在为了在会话放弃时使用户刷新令牌无效,我需要访问令牌,它似乎只对客户端可用。
我可以在从 Web 客户端登录时显式获取此信息,然后使用 GraphQL 将其发布回数据库进行记录,但令我惊讶的是,它在发送到 Lambda 事件触发器的 Cognito 有效负载中不可用。如果在持续使用应用程序一小时后刷新,我也不确定如何在客户端上获取刷新的令牌,而不会增加应用程序中的每次更改的开销。
如果您在客户端上使用 Amplify 进行身份验证流程,是否可以从服务器端进程(如 Lambda 函数)请求 Cognito 用户的当前访问令牌?我在 cognitoidentityprovider 中看不到任何允许我检索访问令牌的内容,但显然需要使用 GlobalSignOut。