REST API + OAuth + 移动流程

REST API + OAuth + Mobile Flow

我必须为移动应用程序开发 RESTful API,我对这些部分之间的通信流有些担忧。我是 API 移动设备和 OAuth 开发的新手。

共同的项目应该这样工作:

我在这里发现了一个类似的问题OAuth on REST API for mobile app,我更喜欢第一个解决方案,但我对这个解决方案的安全性有一些疑问。

1) 我应该为 API 使用 OAuth2 吗?我不确定将用户的 Google ID 发送到 API 以获取用户数据是否是个好主意。

2) 如何在服务器上检查 Google ID 是否正确且真实?或者根本不重要?

我正在考虑这种情况,但我不确定这是最好的解决方案:

1) 用户首次使用他的 Google 帐户登录移动应用程序。

2) 移动应用程序收到 Google ID 和一些附加信息。

3) 移动应用程序将 Google ID 发送到服务器。

4) 服务器使用OAuth2。它为用户创建一个帐户(在数据库中保存 Google ID)和 returns 移动应用程序的访问令牌。

5) 移动应用程序在本地存储访问令牌并将其用于对服务器的请求。访问令牌过期后,用户必须使用他的 Google 帐户再次登录移动应用程序。

我对仅使用 Google ID 生成令牌有些担心。我的意思是,任何人都可以使用某人的 Google ID 来创建令牌。坏主意:(

我是否应该更好地使用 JWT 作为令牌?

感谢您的帮助!

  1. 您应该将用户的 id_token 发送到 API 而不是
  2. 有几个不同的ways,您可以在其中验证服务器端 ID 令牌的完整性:

    a) "Manually" - 不断下载 Google 的 public 密钥,验证签名,然后验证每个字段,包括 iss 一个;我在这里看到的主要优点(尽管在我看来很小)是您可以最大限度地减少发送到 Google.

    的请求数量

    b) "Automatically" - 在 Google 的端点上执行 GET 以验证此令牌 https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}

    c) 使用 Google API Client Library.

至于工作流程,除了最后一步外,大部分都是正确的,您可以在不提示用户许可的情况下 refresh an access token 代替。顺便说一句,Google 的 id_token 实际上是一个 JWT。