我试图在我的应用程序中使用AccountManager.confirmCredentials方法进行用户验证。我就是这么用的:
AccountManager am = AccountManager.get(ctx);
am.confirmCredentials(account, null, ctx, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> amf) {
try {
Bundle b = amf.getResult();
boolean r = b.getBoolean(AccountManager.KEY_BOOLEAN_RESULT);
vc.onValidateResult(r);
return;
} catch (OperationCanceledException ignore) {
} catch (AuthenticatorException ignore) {
} catch (IOException ignore) {
}
vc.onValidateResult(false);
}
}, null);但是从Android 5开始,用户就可以清除Google授权表单中提议的帐户名,并使用自己的帐号。结果将是正的,并且无法验证所请求的帐户名是否用于确认,因为got包只有时间戳和所产生的布尔值。换句话说,包没有KEY_ACCOUNT_NAME字段,但是,与它应该提供的引用相对应。
有人知道如何解决这一漏洞吗?
发布于 2020-09-27 20:54:59
它已经被谷歌修复了。现在,在没有代码更改的情况下,它可以像预期的那样工作。
发布于 2019-08-08 20:29:37
根据文件:
如果未指定活动或密码,则返回的绑定包含KEY_INTENT,其目的是启动密码提示。此外,返回的绑定可能包含KEY_LAST_AUTHENTICATED_TIME,指示验证/创建凭据的最后一次时间。
如果您的结果不包含帐户名称,那么它必须是由于上述情况。您应该检查意图是否包含KEY_INTENT,如果包含了,则启动该意图来验证。
https://stackoverflow.com/questions/57288845
复制相似问题