我必须为移动应用程序开发RESTful API,我对这些部分之间的通信流程有些担忧。我是移动设备和OAuth的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作为代币吗?
感谢您的帮助!
答案 0 :(得分:1)
id_token
发送给API 您可以在服务器端验证ID令牌的完整性,但有几个不同的ways:
a)“手动” - 不断下载Google的公钥,验证签名,然后是每个字段,包括iss
个字段;主要优势(虽然我认为是一个小优势)我在这里看到的是,您可以最大限度地减少发送给Google的请求数量。
b)“自动” - 在Google端点上执行GET以验证此令牌
https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}
至于工作流程,它最基本正确,除了最后一步,您可以在不提示用户许可的情况下refresh an access token。顺便说一句,Google的id_token
实际上是JWT。