REST API + OAuth +移动流程

时间:2016-12-27 22:10:19

标签: api mobile oauth google-oauth mobile-development

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

共同的项目应该以这种方式运作:

  • 允许用户仅使用自己的Google帐户登录
  • 移动应用程序使用网站API,所有信息都存储在后端

我在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)并向移动应用程序返回访问令牌。

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

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

我还应该更好地使用JWT作为代币吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

    a)“手动” - 不断下载Google的公钥,验证签名,然后是每个字段,包括iss个字段;主要优势(虽然我认为是一个小优势)我在这里看到的是,您可以最大限度地减少发送给Google的请求数量。

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

    c)使用Google API Client Library

  3. 至于工作流程,它最基本正确,除了最后一步,您可以在不提示用户许可的情况下refresh an access token。顺便说一句,Google的id_token实际上是JWT。