如何解决如何使用Flutter使用Auth0进行安全登出?
我已按照本article的说明开始使用Flutter的Auth0。
作者写道:“ ...完整的安全注销超出了本文的范围”。
文章中的注销方法是这样的:
void logoutAction() async {
await secureStorage.delete(key: 'refresh_token');
setState(() {
isLoggedIn = false;
isBusy = false;
});
}
我从设备上的安全存储中删除了refresh_token。 现在,我希望能够进行更完整的注销,该用户必须再次使用用户名和密码进行完全登录。目前,用户无需输入用户名和密码即可登录,我认为这是由于访问令牌已保存在某处。如果是由于访问令牌引起的,那么如何从浏览器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();
});
}
}
解决方法
只需取消注释 loginAction() 方法中的行:
// promptValues: ['login']
,我的解决方案是分析文章中给出的注销功能。
以前 Auth0 似乎在调用时发送刷新令牌
appAuth.token
但现在不是这样了,所以我评论了以下代码
await secureStorage.write(6
key: 'refresh_token',value:response.refreshtoken);
现在,如果用户已登录,flutter 应用程序具有可用于调用 appAuth.token 的刷新令牌,如果用户已注销,则令牌已被删除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。