2

我正在使用 Vue 和 AWS Amplify 为应用程序创建自定义身份验证组件。我正在尝试创建一个复选框以在登录时记住设备,这将允许用户选择在成功登录后不必使用 mfa 代码登录。查看 Auth Class 文档,它似乎没有包含“记住我”或“记住此设备”选项。

有没有办法存储用户会话,以便他们在登录或任何其他方式后不在设备上使用 mfa?

此外,我已经将我的 cognito 用户池配置为能够在用户选择加入时记住设备,以及在他们选择加入时抑制 mfa。似乎他们没有任何当前的方法来运行该选项......

4

1 回答 1

0

以下都是基于这里关于这个问题的讨论:https ://github.com/aws-amplify/amplify-js/issues/2552

有一种方法可以根据您在问题中提出的内容,使用 Amplify 轻松添加“记住我”功能。但是,请记住,我提出的方法使用 localStorage 与 sessionStorage,这是 OWASP 不鼓励的(在这里讨论:本地存储可以被认为是安全的吗?,并在此处记录:https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet。 html ).

然而,它是一个简单的解决方案,用于测试和让某些东西快速运行(只是不要忘记在上线之前保护它——著名的遗言哈哈哈)。

以下是步骤:

  1. 使用您要设置的所有配置创建一个 awsConfig 对象,如放大文档中所述:https ://docs.amplify.aws/lib/auth/start/q/platform/js/#re-use-existing-authentication -资源
// awsConfig.tsx module:
const awsConfig = {
    // REQUIRED only for Federated Authentication - Amazon Cognito Identity Pool ID
    identityPoolId: 'XX-XXXX-X:XXXXXXXX-XXXX-1234-abcd-1234567890ab',
    
    // REQUIRED - Amazon Cognito Region
    region: 'XX-XXXX-X',
    
    //...etc...

    //storage: window.sessionStorage OR .localStorage <--- LEAVE THIS OUT OF THIS CONFIG
}

export default awsConfig

  1. 进入您的 App.tsx 或 App.js,在 App 函数中,调用 Auth.configure(),并将 awsConfig 对象从上面的 #1 传递给它:
// App.tsx module:
import { Auth } from '@aws-amplify/auth'
import awsConfig from './awsConfig'

//...etc...

const App: React.FC = () => {
  Auth.configure(awsConfig)

//...etc...


  1. 进入你的登录组件,检查是否勾选了“记住我”复选框,然后重新调用 Auth.configure() 函数,但这次也传递了首选存储参数:
//Login.tsx module
import { Auth } from '@aws-amplify/auth'
import awsConfig from './awsConfig'
//...etc...

rememberLogin
     ? Auth.configure({ ...awsConfig, storage: localStorage })
     : Auth.configure({ ...awsConfig, storage: sessionStorage });

//...etc...

try {
     const awsUser = await Auth.signIn(username, password);

//...etc...

  1. 没有第 4 步……就是这样……你已经完成了……
于 2021-12-16T17:12:15.113 回答