2016-12-27 95 views
1

我必须为移动应用程序开发一个RESTful API,并且对这些部分之间的通信流程有一些担忧。我不熟悉移动设备和OAuth的API开发。REST API + OAuth +移动流程

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

  • 允许用户只使用自己的谷歌账户
  • 移动应用程序使用本网站的API,所有的信息都存储在后端登录

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

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

2)如何检查服务器上的Google ID是否正确和实际?或者它根本不重要?

我想这种情况下,但我不知道这是最好的解决办法:

1)用户登录上使用谷歌自己的账户在第一时间的移动应用程序。

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

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

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

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

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

而且我应该使用JWT更好地为令牌?

感谢您的帮助!

回答

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

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

    B) “自动” - 做谷歌的端点的GET来验证此令牌 https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}

    c)用Google API Client Library

至于工作流程,它主要是正确的,除了最后一步,在那里你可以改为refresh an access token不提示用户授予权限。顺便说一下,谷歌的id_token实际上是一个智威汤逊。

+0

谢谢!这非常有帮助 – Elena