我应该验证Android客户端中的OAuth2令牌,还是App Engine本身会根据传递给后端API的凭据对用户进行身份验证?

问题描述 投票:3回答:3

我正在使用App Engine后端创建一个Android应用程序,并尝试使用OAuth2通过Android设备上的Google帐户对用户进行身份验证,但我无法确定是否需要执行以下所有步骤或是否只是第1步就足够了。

第1步:在Google的本教程中 ,他们使用设备上的Google帐户创建了GoogleAccountCredential,并将其传递给App Engine上托管的后端API。

第2步:在其他教程中 ,只有在Android应用中获取OAuth2访问令牌没有返回错误时,他们才会传递此凭据。

第3步:在另一个教程中 ,已建议后端应检查Android客户端发送的令牌,以验证Google是否生成了此令牌,以及请求令牌的设备是否与后端的受众值相匹配。

所以我的问题是:我们是否真的需要Android应用程序中的第2步和第3步,其后端托管在App Engine上,或者如果我们将为手机上找到的Google帐户创建的凭据传递给App Engine,则App Engine会处理2和3后端API?

另一件事是我的代码中应该经常和在哪里验证应用程序用户:1。在每个端点调用之前是否需要它? 2.或者仅在应用程序启动时运行身份验证代码就足够了? 3.或者更好的是,如果仅基于步骤1进行身份验证就足够了,如果我从AccountManager获取用户的Google电子邮件地址,将其与SharedPreferences一起存储并根据存储的电子邮件创建GoogleAccountCredential就可以了一个端点呼叫,直到用户明确要求退出或切换帐户?

请帮我决定哪种方法最有意义。 像往常一样,非常感谢帮助! :)

android google-app-engine authentication oauth google-cloud-endpoints
3个回答
2
投票

蒂姆的文章(第3步)是正确的。 当服务器收到令牌时,它必须验证它是否适合它们。 这是Google Cloud Endpoints将为您做的事情,方法是配置客户ID /受众群体字段,例如以下示例: https//developers.google.com/appengine/docs/java/endpoints/auth


1
投票

我最终将使用手机上找到的帐户名创建的GoogleAccountCredential传递给端点构建器。 然后,在端点API方法中,我添加了一个User参数,该参数在根据传递给端点构建器的凭据对用户进行身份验证后由App Engine自动填充。 作为最后的检查,我比较了User.email是否提供了我用来创建GoogleAccountCredential的电子邮件地址。


0
投票

确保在后端进行身份验证。 如果您以标准方式传递它们,GAE应自动将其用作您的凭据。 UserService应该为您提供用户详细信息,而无需您在服务器端进行操作。

© www.soinside.com 2019 - 2024. All rights reserved.