【问题标题】:Serverside user-identification服务器端用户识别
【发布时间】:2014-03-31 09:38:44
【问题描述】:

所以这可能是一个新问题。

我正在使用 PHP 开发一个 REST(ful) JSON 应用程序编程接口。此 API 将主要由 Android 设备通过应用程序访问。由于只有拥有 G+ 帐户的人才会使用这个应用程序,所以我想使用 Google API 进行用户身份验证。到目前为止,一切都很简单。

但我是第一次使用 GoogleAPI,我阅读了 Google API DevDocs 中有趣且需要的部分。所以我找到了我现在正在使用的 google-api-php-client

这是我认为此身份验证过程的工作原理:

  1. 用户在移动设备上登录 G+Account(或类似设备;我读过一些有关 PlayStore ID 令牌或 here 的内容)
  2. 该应用程序现在确实有一个令牌(如所述here(响应)) "access_token":"1/fFAGRNJru1FTz70BzhT3Zg", "expires_in":3920, "token_type":"Bearer"
  3. Android-App 向我的 PHP API 发送请求,例如 GET /meeting/:id,并发送 access_token(仅限 1/fFAGRNJru1FTz70BzhT3Zg)。
  4. 我的应用可以获取 access_token 并可以向googleAPI/people/me 询问用户的 ID。
  5. 在我的 API 的请求中识别出用户,然后魔法可以继续进行

但是上面提到的 PHP 的 Google-lib 有一个问题: 正如文档所说,函数 setAccessToken($accessToken) 需要 整个 JSON 响应 {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer", "expires_in":3600, "id_token":"TOKEN", "created":1320790426} (请参阅here)对 GoogleAPI 的身份验证请求。

在每个请求上将带有 id_token、refresh_token 和 access_token 的整个 JSON 响应发送到我的 API 不可能是解决方案,因为这会导致大量流量,我确信有一个简单的解决方案,但是没看到。

我希望我能正确地解释我的想法和问题,我希望我的英语没有那么糟糕。

【问题讨论】:

    标签: php android google-api google-api-php-client


    【解决方案1】:

    我刚刚解决了这个问题。

    id_token 足以识别用户。当 android 应用发送带有 id_token 的请求时,服务器可以向 google 询问其身份。

    google-api-php-client 中,这适用于: $id_token = $_GET['id_token']; $client = new Google_Client(); $attr = $client->verifyIdToken($id_token)->getAttributes(); echo $attr['payload']['sub'];

    我在Google API Docs 中找到了这个(还有一个“推荐流程”描述),并借助问题中的mentioned link 之一。

    【讨论】:

      猜你喜欢
      • 2013-04-08
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 2011-05-14
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多