授权用户通过 google 服务使用 REST API

authorize user to use REST API through google services

我有三个演员:

  1. (my) RESTful API 支持 SSL。
  2. (my) Android 有 Google "Sign in" 按钮的应用程序。
  3. (my) 允许用户通过 OAuth 使用其 Google 帐户注册的 Web 应用程序。

我希望能够做的是:

  1. 当用户在移动设备上登录时生成一些东西。
  2. 将其与我可以在服务器上为该 Google 帐户生成的其他内容进行比较。
  3. 如果两部分匹配,则为应用程序提供一个新生成的令牌,它可以在一段时间内用于所有后续 API 调用。

我该怎么做?我正在阅读 OAuth 文档,但我很难理解这些 "something" 和 "something else" 是什么。任何帮助将不胜感激。

我不知道你是否还在为这个而烦恼,我发现你的问题与你有相同的范围并且面临相同的问题并且在搜索网络之后(Google,Stack overflow 和 Google Developers documentation)我发现了一些你今天晚上下班后可以帮助其他人在他们的应用程序中实现这个功能的东西:

https://developers.google.com/identity/protocols/OAuth2InstalledApp

但这还不够,是一本好书,但根本解决不了我们的问题。

关于这个主题的更多有用读物应该是这个(说 "This quick-start app lets you get started with Google Identity Toolkit on Android in about 30 minutes."):

https://developers.google.com/identity/toolkit/android/quickstart#step_2_configure_the_google_identity_toolkit_api

我试过一次,但我的应用程序和网络 api 还不够成熟,我会尽快尝试,如果我能使它按预期工作(如典型的那样),我会告诉你Web 应用程序示例)...

希望对其他人有所帮助。

我已经解决了这个问题,但我不确定这是否是最好的方法。

对于Google,我发送我通过GoogleAuthUtil.getToken()在应用程序中获得的用户uid和授权令牌。在服务器上,我转到 https://www.googleapis.com/oauth2/v1/tokeninfo?fields=user_id&access_token={token},其中 {token} 是我从移动应用程序收到的令牌。如果 OAuth2 响应中的 user_id 匹配 API 提供的 uid 并且 uid 匹配我数据库中的某些用户记录,则该用户被认为已通过身份验证。

对于Facebook,我做同样的事情,除了我使用session.getAccessToken(...)在应用程序端获取令牌并https://graph.facebook.com/me?fields=id&access_token={token}与Facebook验证它。