Google在Android应用中登录以使用Cloud Endpoints后端

Mar*_*kis 6 android oauth google-cloud-endpoints google-signin

我正在编写一个带有Google Cloud Endpoints后端的Android应用,我希望通过Google登录来限制我的后端.

我已按照Android说明操作,并已成功登录.换句话说,我收到了一个令牌,然后我可以将其传递给服务器并验证它代表的用户.大.

但是,我在这里错过了更大的图景.问题:

  1. 我是否应该将此令牌与每个请求一起发送回服务器,并重复在每个请求中验证它的过程?
  2. 如果是,则令牌将在某个时刻到期(我相信1小时).我想用户不必再次登录,应该离开以避免这种情况,对吧?
  3. 是一种刷新令牌的方法(我认为Google Signin是OAuth2)?
  4. 最重要的是,这是所有人使用Google登录来保护其后端的标准方式吗?我期待这是一个非常简单的过程,因为我只使用谷歌产品.但是,我发现自己在Android和Cloud Enpoints的文档页面和页面中丢失了许多拼图.

任何帮助或见解表示赞赏.

Pra*_*hat 1

我没有使用 android 身份验证,但 google 使用 outh2 进行所有身份验证。Google SDK 可以帮助您减轻使用 oauth2 的一些痛苦。回答您的问题

  1. 是的 - 您处于基于令牌的身份验证世界中,并且您确实会在每个请求中发送令牌。
  2. 是的。令牌将在一小时后过期。为了解决这个问题,当您第一次进行 oauth2 身份验证时,您还会获得一个刷新令牌。当用户的令牌过期时,您可以使用刷新令牌来获取新令牌。该刷新令牌可以存储在客户端。客户端将在其中一个请求期间发现现有令牌已过期,并将使用刷新令牌请求新令牌
  3. 是的,您可以使用 google 刷新令牌 URL 来使用刷新令牌并获取新令牌。我在下面给出了 google 的重要 oauth URL。
  4. 这确实是 oauth2 进程我的朋友。

由于您使用的是云端点,我相信您会创建身份验证端点。

使用服务提供商(google、facebook、github 等)进行 oauth2 身份验证时,通常会创建以下端点:

https://webiste.com/auth/signin/{provider}
https://webiste.com/auth/callback/{provider}
https://webiste.com/auth/refresh/{provider}
Run Code Online (Sandbox Code Playgroud)

以下是您将使用的 oauth2 的 google URL:

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
Run Code Online (Sandbox Code Playgroud)

您还需要浏览 google 的 oauth2 文档,网址为https://developers.google.com/identity/protocols/OAuth2