如何使用 Amplify Auth Class 添加“记住我”功能?

Posted

技术标签:

【中文标题】如何使用 Amplify Auth Class 添加“记住我”功能?【英文标题】:How to use Amplify Auth Class to add "remember me" functionality? 【发布时间】:2021-06-25 01:49:56 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

以下内容均基于此处对该问题的讨论:https://github.com/aws-amplify/amplify-js/issues/2552

有一种方法可以根据您在问题中提出的内容,通过 Amplify 轻松添加“记住我”功能。但是,请记住,我提出的方法使用 localStorage 与 sessionStorage,OWASP 不鼓励这种方法(在此处讨论:Can local storage ever be considered secure?,并在此处记录:https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html)。

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

步骤如下:

    使用您要设置的所有配置创建一个 awsConfig 对象,如放大文档中所述:https://docs.amplify.aws/lib/auth/start/q/platform/js/#re-use-existing-authentication-resource
// 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

    进入您的 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...


    进入您的登录组件,检查是否勾选了“记住我”复选框,然后重新调用 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...

    没有第 4 步……就是这样……你已经完成了……

【讨论】:

以上是关于如何使用 Amplify Auth Class 添加“记住我”功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Firebase Auth 作为 OIDC 向 Amplify GraphQL 发出经过身份验证的请求?

使用 AWS Amplify Auth 和 GraphQL API,您将如何进行一些公共和一些私有查询/突变调用?

AWS Amplify AppSync GraphQL @Auth 指令:如何禁止为公共用户列出元素

缩小apk时,Amplify.Auth.fetchAuthSession() userPoolTokens为空

使用 Auth0 进行 aws-amplify

Auth.signIn() 使用设备 - AWS Amplify 与 React-Native