android - Google Smart Lock for Passwords - 联合凭据密码对应用可见吗? (例如,保存用户的 Facebook 或 Google 登录操作时)

标签 android google-smartlockpasswords

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

 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 帐户凭据并进行恶意操作。如何保护用户?

最佳答案

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

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

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

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

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

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

关于android - Google Smart Lock for Passwords - 联合凭据密码对应用可见吗? (例如,保存用户的 Facebook 或 Google 登录操作时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561814/

相关文章:

android - 我可以更改登录提示模式标题(从 'Choose an Account' 到 'Pre-fill Sign up form' )

android - 应用程序和网站保存的密码不同步

google-signin - 谷歌智能锁与凭证管理 API

android - 更新到 API 28 后找不到资源样式/Widget.Design.CoordinatorLayout

android - 我如何判断我的 Activity 是否由广播接收器启动?

android - 图像从相机或图库加载到 ImageView 中

android - 在 Android 应用程序中实现无密码方便登录的最佳方法? (客户端-服务器架构)

android - (多个按钮)如何将多个 XML 文件链接到 Android 应用程序的 1 个主要 Java 页面?

android - Webview 应用程序中的 Google 和 Facebook 登录 (OAuth)(需要覆盖弹出功能吗?)

android - 如何在我的应用程序中使用智能锁 API 来解锁图案模式?