Android:Google SSO - OAuth 还是 AccountManager?或两者?

Posted

技术标签:

【中文标题】Android:Google SSO - OAuth 还是 AccountManager?或两者?【英文标题】:Android: Google SSO - OAuth or AccountManager? Or both? 【发布时间】:2012-04-12 13:49:23 【问题描述】:

在阅读了各种 *** 帖子和各种文档(包括 http://code.google.com/p/google-api-java-client/ 网站上的一些文档)后,我感到非常困惑。那么有人可以向我解释实现以下目标的最佳方法:

    让用户批准我的应用程序。我真的不在乎这是通过访问他们在帐户/设置中注册的 Google 帐户并批准应用程序(首选方式)还是通过调用 Google OAuth 身份验证页面来完成的 获取可用于与 Google Reader 通信的身份验证令牌

我的另一个困惑点 - 我能够使用 AccountManager 批准我的应用程序并从中获取身份验证令牌,但它不适用于 Google Reader。那么如何平衡来自 AccountManager 和 OAuth 的 Account 信息呢?在 AccountManager 设置中获得用户批准后,我还需要对 OAuth 执行任何操作吗?

代码示例会很好,但我会更多地寻找关于所有这些部分如何相互关联的清晰解释

【问题讨论】:

“批准”您的应用是什么意思?您是否寻求在您的应用中使用他们的身份 (OpenID) 或让您的应用通过 Google (OAuth) 访问您的用户数据? 公平的问题。在这种特殊情况下,我希望能够使用手机注册的 Google 帐户将用户登录到他们的 Google 阅读器帐户。或者(如果不可能的话)我不介意(但不希望)将用户最初重定向到 Google OAuth 应用批准页面。 实际从谷歌阅读器账户中检索信息是由远程服务器完成的,应用只需要传递相应的身份验证令牌 【参考方案1】:

客户经理可让您获取不同服务的身份验证令牌。底层有不同的具体实现:ClientLogin、OAuth 等。要让它与谷歌阅读器一起工作,你需要传递适当的令牌类型。对于 ClientLogin,这些是短字符串,例如“ah”(App Engine)和“reader”(Google Reader)。对于 OAuth,它们是由每个服务定义的范围。那么,您传递的authTokenType 参数是什么?

获取令牌是异步的,因为它可能涉及网络访问。如果有缓存的令牌,如果有效,它将立即返回。流程并不复杂,请参阅上面的链接以获取漂亮的图片。获得令牌后,将其放入适当的标头中,并按照规范使用 API。

【讨论】:

正如我所说,我更愿意使用他们现有的 Google 帐户为用户签名。是否有关于这些“短字符串”的文档概述了支持的内容? 正确的术语实际上是“服务名称”。这不是一个完整的列表,但这里是大多数:code.google.com/apis/gdata/faq.html#clientlogin。有关对 Google 服务进行身份验证的一般信息,您可能需要从这里开始:developers.google.com/accounts。 android 的 AccountManger 只是这些的前端。 谢谢尼古拉。我接受你的回答,因为我很确定我现在可以弄清楚剩下的部分 我认为我现在使用这种方法遇到的问题是 Reader 仍然没有官方 API。所以我无法使用 Google concole 指定我的 API 密钥,只能获得只读访问权限。所以我正在为此创建另一个问题 有这个,但不是官方的:code.google.com/p/google-reader-api 这可能也有帮助,它有一些 Android 特定的代码,但是,AFAIK,不支持阅读器:code.google.com/p/google-api-java-client【参考方案2】:

以下是有关 AccountManager 的 Android 培训课程,可能会有所帮助:

http://developer.android.com/training/id-auth/authenticate.html

此外,将 AccountManager 与 Google Reader 结合使用是目前唯一的首选方式。将您的用户引导到带有 WebView 的登录页面不是很安全,据我所知,Google API 不支持使用浏览器(我也不确定 Reader 是否使用 OAuth2)。

【讨论】:

以上是关于Android:Google SSO - OAuth 还是 AccountManager?或两者?的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助使用 Google Oauth 和 Android 配置 Django Rest API

使用Laravel的Azure Active Directory SSO

Android:如何在GMAIL上获取SSO的YOUR_AUTHENTICATION_ENDPOINT?

执行 Auth0/Google 联合 SSO 注销时如何将用户重定向回我的应用程序?

将 Google 的 SSO 与 AWS Managed Grafana 一起使用并获得:Failed to save the SAML received information

Android/iOS:如何使用 SAML 协议通过 Azure AD 为移动设备提供 SSO