在 Android 应用中登录 Google 以使用 Cloud Endpoints 后端
Posted
技术标签:
【中文标题】在 Android 应用中登录 Google 以使用 Cloud Endpoints 后端【英文标题】:Google signin in Android app to consume Cloud Endpoints backend 【发布时间】:2017-08-10 09:30:26 【问题描述】:我正在编写一个带有 Google Cloud Endpoints 后端的 android 应用,并且我想使用 Google 登录来限制我的后端。
我已关注Android instructions,并已成功登录。换句话说,我收到了一个令牌,然后我可以将其传递给服务器并验证它所代表的用户。太好了。
但是,我在这里错过了更大的图景。问题:
-
我是否应该将这个令牌与每个请求一起发送回服务器,并在每个请求中重复验证它的过程?
如果是,令牌将在某个时间点过期(我相信 1 小时)。我想用户不必再次登录,应该避免这种情况,对吧?
是一种刷新令牌的方法(我认为 Google Signin 是 OAuth2)?
最重要的是,这一切都是人们使用 Google 登录来保护其后端的标准方式吗?我原以为这是一个非常简单的过程,因为我只使用 Google 产品。但是,我发现自己迷失在关于 Android 和 Cloud Enpoints 的一页又一页的文档中。
感谢任何帮助或见解。
【问题讨论】:
如果你只支持谷歌登录,那么可以,你可以只使用客户端库提供的ID令牌作为后端请求的授权,并每次验证令牌。使用 silentSignIn 为每个请求获取一个新的(或缓存的)令牌:developers.google.com/android/reference/com/google/android/gms/… 通常后端系统会支持其他类型的身份验证(例如站点自己的用户名/密码),并且会为 Google 登录和密码用户使用相同类型的会话管理(设置 cookie 并使用它作为授权或通过刷新和访问令牌会话管理进行适当的 OAuth) 【参考方案1】:我没有使用 android 身份验证,但 google 使用 outh2 进行所有身份验证。 Google SDK 可以帮助您减轻使用 oauth2 的一些痛苦。回答您的问题
-
是的 - 您处于基于令牌的身份验证的世界中,并且您确实会随每个请求发送令牌。
是的。令牌将在一小时后过期。为了在您第一次进行 oauth2 身份验证时解决此问题,您还会获得一个刷新令牌。当用户的令牌过期时,您使用刷新令牌来获取新令牌。此刷新令牌可以存储在客户端。客户端将在其中一个请求期间发现现有令牌已过期,并将使用刷新令牌请求新令牌
是的,您使用 google 刷新令牌 URL 来使用刷新令牌并获取新令牌。我在下面给出了google的重要oauth URL。
这确实是oauth2进程我的朋友。
由于您使用的是云端点,我相信您将制作身份验证端点。
在使用服务提供商(google、facebook、github 等)进行 oauth2 身份验证时,您通常会创建以下端点:
https://webiste.com/auth/signin/provider
https://webiste.com/auth/callback/provider
https://webiste.com/auth/refresh/provider
以下是您将使用的 oauth2 的 google 网址:
oauth_url: 'https://accounts.google.com/o/oauth2/v2/auth', //start auth
token_url: 'https://accounts.google.com/o/oauth2/token', //get id_token, access_token, refresh_token token
refresh_token_url : 'https://www.googleapis.com/oauth2/v4/token',
token_info_url: 'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=', //validate token
您还需要在https://developers.google.com/identity/protocols/OAuth2 上查看谷歌的 oauth2 文档。
【讨论】:
【参考方案2】:我认为您应该使用 Firebase UI Android 库进行身份验证。它为您提供了 Google、Facebook、Email、Twitter 和 Github 登录选项,而且它的好处是只需编写几行代码即可完成。 更多信息请点击here。
【讨论】:
【参考方案3】:最好使用 3ed 方代码来执行此操作。这将花费更少的时间,会有更少的错误,并且以后很容易扩展到其他方法。 我会推荐Firebase,因为它非常简单、免费、运行良好并且归 Google 所有。
【讨论】:
以上是关于在 Android 应用中登录 Google 以使用 Cloud Endpoints 后端的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin.Android 应用上集成新的 Google 登录?
在 Android 应用中,Google 登录弹出窗口未加载
如何在我的 Android 应用程序中集成 google+ 登录?