如何使用 Flutter 通过 Auth0 进行安全注销?

Dan*_*iel 5 access-token auth0 flutter appauth

我已经阅读了这篇关于如何开始在 Flutter 中使用 Auth0 的文章。

作者写道:“ ……完整的安全注销超出了本文的范围”。

文章中的注销方法是这样的:

void logoutAction() async {
await secureStorage.delete(key: 'refresh_token');
setState(() {
  isLoggedIn = false;
  isBusy = false;
});
Run Code Online (Sandbox Code Playgroud)

}

我从设备上的安全存储中删除了刷新令牌。现在,我希望能够进行更完整的注销,该用户必须使用用户名和密码再次进行完整登录。目前,用户无需输入用户名和密码即可登录,我认为这是由于访问令牌保存在某处。如果这是由于访问令牌造成的,我如何从浏览器 cookie 或存储它的任何位置删除此访问令牌?

避免存储访问令牌的一种方法是添加promptValues: ['login]到登录方法中。这样做的问题是用户每次都必须登录,因此完全消除了存储的访问令牌的好处。再次强调,我希望用户能够“完全”注销,从 cookie 中清除访问令牌。

Future<void> loginAction() async {
setState(() {
  isBusy = true;
  errorMessage = '';
});

try {
  final AuthorizationTokenResponse result =
      await appAuth.authorizeAndExchangeCode(
    AuthorizationTokenRequest(
      AUTH0_CLIENT_ID,
      AUTH0_REDIRECT_URI,
      issuer: 'https://$AUTH0_DOMAIN',
      scopes: ['openid', 'profile', 'offline_access'],
      // promptValues: ['login']
    ),
  );

  final idToken = parseIdToken(result.idToken);
  final profile = await getUserDetails(result.accessToken);

  await secureStorage.write(
      key: 'refresh_token', value: result.refreshToken);

  setState(() {
    isBusy = false;
    isLoggedIn = true;
    name = idToken['name'];
    picture = profile['picture'];
  });
} catch (e, s) {
  print('login error: $e - stack: $s');

  setState(() {
    isBusy = false;
    isLoggedIn = false;
    errorMessage = e.toString();
  });
}
Run Code Online (Sandbox Code Playgroud)

}

小智 0

只需取消注释方法 loginAction() 中的行:

// 提示值: ['登录']