如何使用 Android AccountManager 注销

Posted

技术标签:

【中文标题】如何使用 Android AccountManager 注销【英文标题】:How can i log out with AndroidAccountManager 【发布时间】:2011-07-05 17:22:48 【问题描述】:

我可以使用 android AccountManager 使用以下代码登录: http://code.google.com/p/google-api-java-client/wiki/AndroidAccountManager

但我不知道如何退出?

【问题讨论】:

【参考方案1】:

AccountManager clearPassword(账户账户)

来自 AccountManager:

忘记保存的密码。这将删除密码的本地副本; 它不会更改用户在服务器上的帐户密码。有 与setPassword(account, null) 的效果相同,但需要更少 权限,并且可以由应用程序或管理接口使用 从帐户中“退出”。

【讨论】:

您永远不应该将密码实际保存在 AccountManager 中。是的,我知道该设施存在,但如果您正确使用它,它确实不是那么方便,并且以这种方式使用密码存在安全风险。【参考方案2】:

为什么不通过调用使您当前的身份验证令牌无效

 AccountManager.getInstance().invalidateAuthToken(accountType, currentToken);

AccountManager.invalidateAuthToken Documentation

【讨论】:

这不会让您退出。它只是强制 android 在下次尝试使用令牌时再次手动向服务器进行身份验证。【参考方案3】:

你没有。当您使用内置的 android 身份验证时,您使用用户在“Accounts and Sync”控制面板中提供的用户名和密码进行身份验证。获得该身份验证后,您可以使用它来获取一个身份验证令牌,您应该缓存并使用它,直到它变坏为止。

那么,让我们来看看您使用“com.google”样式帐户访问 google 服务的方式。当您的应用程序想要同步时,您最终将使用 AccountManager 进行身份验证(您绝对应该使用 SyncAdapter 来执行此操作)。进行身份验证后,您将获得一个 auth-token。这是一大串随机字母,在随后的网络调用中充当“密钥”。您将保存它,只要它是好的,您就不需要再次进行身份验证。所以,想去取...比如说,一个谷歌金融投资组合。您将 auth-token 包含在 http get 标头中。发生以下两种情况之一:

    Google 喜欢该令牌并使用它(代替用户名/密码对)对您进行身份验证,并为您的请求返回数据。 Google 返回 http 错误 40x 表示您提供的 auth-token 不好。

后一种情况会发生有两个原因:

    太旧了。 Google 希望您定期重新进行身份验证(就像您必须每周或每两周在 gmail.com 输入密码以确保它仍然是您一样。)发生这种情况时,使身份验证令牌无效(有一个函数调用)并获得一个新的。 自从您获得身份验证令牌后,用户更改了密码。同样的事情,除了一路上,设备将无法进行身份验证,然后会向用户抱怨他们需要重新输入密码,在他们这样做之前,您将获得一个 NULL 身份验证令牌,或者调用将阻止直到他们获得密码(取决于您用于获取令牌的函数调用)。

无论如何,您永远不会退出。您只需将服务与您获得并缓存的身份验证令牌一起使用,直到不再使用为止。将您获得的身份验证令牌想象成一个会话密钥,只要您使用它,它就会一直保持良好状态。

【讨论】:

通过 AndroidAccountManager 登录后,我有身份验证令牌字符串,但是当我提出新请求时 通过 AndroidAccountManager 登录后,我有身份验证令牌字符串,但是当我使用 URL 发出新请求时 urlDownload = new URL(link); HttpsURLConnection urlConnection = (HttpsURLConnection) urlDownload.openConnection();当我使用这种方法时,这意味着我没有登录。我怎样才能通过这种方法授权 我使用 google-api-java 库。然后,私有静态最终 HttpTransport mTransport = GoogleTransport.create(); GoogleHeaders 标头 = (GoogleHeaders) mTransport.defaultHeaders; // 在 google-api-java headers..setGoogleLogin(authToken); 中设置 Auth 令牌HttpRequest 请求 = transport.buildGetRequest(); request.url = new GoogleUrl("blabla"); HttpResponse 响应 = request.execute();需要一些额外的东西,为返回的数据设置解析器等。您可以在 google-api-java 示例代码中查看示例。 这并不是对 AccountManager 的一个很好的解释。您不应该为自己的应用程序使用 google.com 帐户类型。但是,这通常是正确的,其想法是您的 authtoken 会随着时间的推移保持有用,并且当它过期时,如果没有轮换机制,会要求用户重新进行身份验证。 @BrillPappin,提问者正在使用 google-api-client。那是谷歌提供的用于访问谷歌自己服务器上的谷歌数据的API。他们正在使用 google.com 帐户类型,因为这是他们正在访问的服务器以及正在验证其用户凭据的人。

以上是关于如何使用 Android AccountManager 注销的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 android:maxWidth?

android源码 下载 如何使用

如何使用Android蓝牙开发

如何使用Android蓝牙开发

Android - 如何根据 Android 版本使用不同的代码行

如何在android中使用WCF服务?