我有一个 React Native 和一个带有 AWS 后端的 React Native Web 前端应用程序。 对于身份验证,我使用 AWS Cognito。 我的一些用户使用公共计算机,因此对于这些用户来说,身份验证令牌应在一小时内过期(如果他们在登录期间将“记住我”选项设置为 false)。
我无法在 AWS 中将刷新令牌过期时间更改为 60 分钟,因为这样我的所有用户都会受到影响 (https://stackoverflow.com/a/63533330/9611924)。
AWS cognito 上有有关“使用 Amazon Cognito 跟踪和记住设备”的文档,但这仅与 2FA 相关。
另一种选择是在您创建 cookie 并在 1 小时后注销时进行监视(在前端),但这意味着黑客(有权访问计算机)可以在启动注销之前访问身份验证 cookie。
虽然 AWS amplify 是一个高级库,没有太多定制空间,但我可以删除刷新令牌吗?
这是一个有效的选项吗?更重要的是,一个安全的选择?
您无法在对
/oauth2/token
端点的请求中设置访问、ID 或刷新令牌的生命周期,就像其他 IdP 似乎可以做到的那样:
https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html
如果刷新令牌已过期,您的应用程序用户必须通过以下方式重新进行身份验证 再次登录您的用户池。
根据应用程序的安全配置文件,您不应指定较低的刷新令牌过期时间,因为这会损害用户的体验:
您无法操纵 cookies 的过期时间来删除它们,无论是在指定时间还是在浏览器关闭时,因为它们被配置为 HttpOnly 和 Secure:
您还可以添加到期日期(以 UTC 时间表示)。默认情况下,cookie 关闭浏览器时删除:
您确定令牌存储为 cookie 吗?通常它们存储在本地或会话存储中。如果是这样,可以使用 JavaScript 在客户端删除它们。这个 answer 显示,您可以配置 Amplify 库将令牌存储在会话存储中,即,当浏览器选项卡关闭时,它们将被删除:
Auth.configure({ storage: window.sessionStorage })
最后,您可能想撤销用户的刷新令牌。这可以仅使用访问令牌来完成: