2

我想知道这里是否存在安全问题?任何使用谷歌智能锁的应用程序都会知道用户的谷歌、推特等帐户凭据吗?在此处查看此 google 教程,在 credentialsRetrieved 回调中,Credential 对象具有应用程序可以访问的用户用户名和密码。但现在该应用知道用户的 google 或 twitter 帐户了吗?这是我正在谈论的代码:

 private void onCredentialRetrieved(Credential credential) {
    String accountType = credential.getAccountType();
    if (accountType == null) {
        // Sign the user in with information from the Credential. 
//right here we have the users login credentials, dont we ??  There exposed. 
        signInWithPassword(credential.getId(), credential.getPassword());
    } else if (accountType.equals(IdentityProviders.GOOGLE)) {
        // The user has previously signed in with Google Sign-In. Silently
        // sign in the user with the same ID.
        // See https://developers.google.com/identity/sign-in/android/
        GoogleSignInOptions gso =
                new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestEmail()
                        .build();
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .setAccountName(credential.getId())
                .build();
        OptionalPendingResult<GoogleSignInResult> opr =
                Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
        // ...
    }
}

所以我在这里看到的是 Credentials 对象可以公开用户密码。我意识到继续登录过程需要凭据,但这是用户在打开智能锁时做出的选择吗?

更糟糕的情况:假设用户启用了智能锁,我制作了一个使用智能锁的应用程序。现在我可以访问用户的 Twitter 帐户凭据并做一些恶意的事情。如何保护用户?

4

1 回答 1

6

我在 Google 的 Smart Lock 团队工作,希望这能回答您的问题:

对于 Google、Facebook、Twitter 或其他“联合”凭证,这些身份提供者帐户的密码不会存储在凭证中。此类凭据上的密码字段为空,“凭据”仅用作指示用户用于给定应用程序的身份提供者的指针。这个想法是,保存和检索这样的凭据将使应用程序知道当前用户有一个现有帐户并应该使用特定的登录方法(并且可以通过触发相应的流程自动登录用户,或帮助自定义UI,以便用户在返回时使用适当的方法登录)。

请注意,从当前版本的 Play 服务 (8.4) 开始,如果应用程序尝试构建和保存具有帐户类型和密码集的凭据,API 将引发错误;第三方应用程序不应要求或存储身份提供者的密码。只有用于登录服务本身的当前用户的应用第一方密码应通过 API 存储在凭据中,并且在这种情况下不应设置帐户类型。

在问题的示例代码中,Google 类型的凭据用于以编程方式触发 Google 登录流程(请参阅Auth.GoogleSignInApi.silentSignIn()调用和此处的完整示例),即自动使用 Google 登录用户,就好像他们点击了Google 登录按钮,因为他们存储了类型为“Google”的凭据。

通常,还请注意,应用程序只能检索已从应用程序本身(由 Android 上的包和证书签名标识)或在 Chrome 中为经过验证和关联的网站(请参阅详细信息)保存的凭据。这意味着应用程序只能访问它代表用户存储的数据(可能在另一台设备上,这个想法是 Smart Lock API 有助于跨设备检索身份验证详细信息),或者用户输入的用户名和密码关联的网站,并选择通过 Chrome 的密码管理器使用 Google 保存。

如果这回答了您的问题或您需要更多信息,请发表评论!

于 2016-01-03T01:58:27.780 回答