Tag: accountmanager

从现有帐户服务types创build电子邮件帐户

我已经通过Android文档提供的SampleSyncAdapter示例项目,但据我所知,我们需要添加一个帐户的自定义帐户服务。 但我的需要是从设备上的现有帐户服务创build一个电子邮件帐户。 为了更清楚我的问题,我举了一个例子 以下是我的设备上提供的帐户服务 我想在每个Android设备上都可以使用“Google”和“电子邮件”帐户服务。 现在我想configuration一个“电子邮件”帐户,所以我必须遵循以下步骤: 步骤1:input现有的电子邮件ID和密码 步骤2:[a]常规设置属性: – (帐户名称,真实姓名,电子邮件地址) 步骤2:[b]传入服务器属性: – (POP或IMAP邮件服务器,服务器地址,用户名,密码) 第2步:[c]发送服务器属性: – (SMTP服务器,用户名,密码) 步骤3:通过select高级设置,我们可以configuration端口和证书选项。 我们需要手动完成上述步骤, 但是我想通过使用以上所有设置以编程方式创build一个电子邮件帐户 。 那么我怎样才能从现有的账户服务中编写新的电子邮件账户呢? 我需要MDM的这个function。

Android客户端的AccountManager中的AuthToken不再工作

我很恼怒 我正在尝试使用Java中的Google App Engine作为服务器,为Android构build基于回合的多人在线游戏。 他们似乎是一个完美的合体。 Android需要一个Google帐户,GAE使用Google帐户进行身份validation,同时免费且可扩展。 所以在假期之前,我可以使用Android 2.0中新的AccountManager API从我的Android客户端获取身份validation到我的GAE应用程序。 以下代码允许您访问用户的Google帐户的AuthToken,然后将其用于身份validation,以便用户不必手动input他们的帐户用户名和密码: AccountManager mgr = AccountManager.get(this); Account[] accts = mgr.getAccountsByType("com.google"); Account acct = accts[0]; AccountManagerFuture<Bundle> accountManagerFuture = mgr.getAuthToken(acct, "ah", null, this, null, null); Bundle authTokenBundle = accountManagerFuture.getResult(); String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString(); 然后,我可以将生成的AuthTokenstring附加到适当的URL并获得一个有效的cookie,然后可以用于所有进一步的请求。 唯一的事情是,上个星期某个时候,它停止了为我工作。 现在,当我尝试从上面的代码中使用AuthToken时,我没有得到一个返回的cookie,我的代码抛出一个NullPointerException的缺less的cookie。 当我回到旧的方式,当用户手动input他们的Google用户名和密码,我从“ https://www.google.com/accounts/ClientLogin ”获得AuthToken,它工作得很好。 请告诉我,有人使用用户手机上的Google帐户中的AuthToken为Google App Engine应用程序构build了一个Android客户端,并告诉我为什么这不再起作用。 我真的想做这个工作。 我的select是要求用户input他们的凭据(这是笨重的,他们不应该这样做),或者与服务器的另一个解决scheme。 提前致谢。

不应该Android AccountManager在每个App / UID基础上存储OAuth令牌吗?

Android的AccountManager似乎为具有不同UID的应用获取相同的caching身份validation令牌 – 这是安全的吗? 它似乎与OAuth2不兼容,因为访问令牌不应该在不同的客户端之间共享。 背景/上下文 我正在构build一个Android应用程序,该应用程序使用OAuth2将REST API请求authentication/授权给我的服务器,这是一个OAuth2提供程序。 由于该应用程序是“官方”应用程序(而不是第三方应用程序),因此它被视为受信任的OAuth2客户端,所以我正在使用资源所有者密码stream获取OAuth2令牌:用户(资源所有者)将他的用户名/密码input到应用程序中,然后将其客户端ID和客户端密码连同用户凭证一起发送到我的服务器的OAuth2令牌端点,以交换可用于进行API调用的访问令牌,当刷新令牌到期时用于获取新的访问令牌。 理由是在设备上存储刷新令牌比用户的密码更安全。 我正在使用AccountManagerpipe理设备上的帐户和关联的访问令牌。 由于我提供了自己的OAuth2提供程序,因此我通过扩展AbstractAccountAuthenticator和其他必需的组件来创build自己的自定义帐户types,如本Android Dev Guide中所述,并在SampleSyncAdapter示例项目中演示。 我可以在我的应用程序中成功添加自定义types的帐户,并通过“帐户和同步”Android设置屏幕pipe理这些帐户。 问题 但是,我关心的是AccountManagercaching和发布授权令牌的方式,具体来说, 对于给定的账户types和令牌types , 同一个授权令牌似乎可以被用户授权访问的任何应用访问。 要通过AccountManager获得授权令牌,必须调用AccountManager.getAuthToken() ,除其他外,传递为其获取授权令牌和期望的authTokenType的Account实例。 如果指定帐户和authTokenType存在authentication令牌,并且用户授予对已经作出authentication令牌请求的应用的访问(通过授予“访问请求”屏幕)(在请求应用的UID不匹配的情况下authentication者的UID),那么令牌被返回。 如果我的解释缺乏, 这个有用的博客条目解释得非常清楚。 基于这篇文章,在考察了AccountManager和AccountManagerService (一个为AccountManager负责的内部类)的来源之后,看起来每个authTokenType /账户组合只有一个授权令牌存储。 所以, 如果恶意应用程序知道我的身份validation器使用的帐户types和authTokenType,则可能调用AccountManager.getAuthToken()来访问我的应用程序存储的OAuth2令牌,假设用户授予访问恶意应用程序。 对我来说,问题是AccountManager的默认caching实现build立在一个范例上,如果我们要分层的OAuth2authentication/授权上下文,它会认为电话/设备是服务/资源提供者的单个OAuth2客户端。 然而,对我来说有意义的范例是每个应用程序/ UID应被视为自己的OAuth2客户端。 当我的OAuth2提供程序发出访问令牌时,会为该特定应用程序发出访问令牌,该令牌已发送正确的客户端ID和客户端密钥,而不是设备上的所有应用程序。 例如,用户可能同时拥有我的官方应用程序(称为应用程序客户端A)和使用我的API(称为应用程序客户端B)的“许可”第三方应用程序。 对于官方客户端A,我的OAuth2提供者可能会发出一个“超级”types/范围令牌,授权访问我的API的公共和私有片段,而对于第三方客户端B,我的提供者可能会颁发“受限”types/范围令牌,只允许访问公共API调用。 应用程序客户端B不可能获得应用程序客户端A的访问令牌,目前的AccountManager / AccountManagerService实现似乎允许。 因为,即使用户向客户端A的超级令牌授予客户端B的授权,事实仍然是,我的OAuth2提供者仅仅意图将该令牌授予给客户端A. 我在这里忽略了什么? 我认为应该以每个应用程序/ UID为基础(每个应用程序是一个独立的客户端)发布授权令牌,理性/实用,或者是每个设备的授权令牌(每个设备是客户端)的标准/接受实践? 或者,在我对AccountManager / AccountManagerService周围的代码/安全性限制的理解中是否存在一些缺陷,使得这个漏洞实际上不存在? 我已经使用AccountManager和我的自定义身份validation器testing了上述客户端A /客户端Bscheme,而我的testing客户端应用程序B具有不同的包范围和UID,能够获得我的服务器为我发放的身份validation令牌testing客户端应用程序A通过传入相同的authTokenType (在此期间,我被提示“访问请求”授予屏幕,我批准,因为我是一个用户,因此无能为力)… 可能的解决scheme 一个。 “秘密”authTokenType 为了获得auth令牌,必须知道authTokenType ; 应该将authTokenType作为一种客户端秘密来处理,使得只有那些知道秘密令牌types的“已授权”的客户端应用程序才能获得给定秘密令牌types的令牌? 这似乎不是很安全; […]

Webservice凭证 – OpenID / Android AccountManager?

我build立一个web服务,并希望使用用户的谷歌帐户凭据。 该服务在GAE上运行,并将有一个Web客户端和一个Android本地客户端。 这是我第一次尝试这样的事情,我一直在阅读关于OpenID和Android AccountManager库。 我仍然不确定在我的数据存储中存储用户方面有什么select。 我应该使用什么标识符? 是否可以在本机Android应用程序上使用OpenID? 任何帮助和/或指针,将不胜感激。 谢谢。

如何检索Android手机上login的Google帐户?

我正在开发一个Android应用程序,我需要检索手机上使用的Google帐户。 我想为C2DM做这件事,但是如果他们已经login,我不想让用户input他/她的Google电子邮件帐户。有没有办法做到这一点?

我应该怎样使用Android AccountManager?

我在Android SDK中看到了AccountManager,它用于存储帐户信息。 因此,我无法find它的目的是什么一般的讨论。 有没有人知道有什么有用的讨论AccountManager背后的意图是什么,它买什么? 任何意见,这是适合什么types的帐户? 这是否会将您的用户的帐户信息放到一般的Web服务中?