REST API + OAuth + 移动流程
REST API + OAuth + Mobile Flow
我必须为移动应用程序开发 RESTful API,我对这些部分之间的通信流有些担忧。我是 API 移动设备和 OAuth 开发的新手。
共同的项目应该这样工作:
- 用户只能使用他们的 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)和 returns 移动应用程序的访问令牌。
5) 移动应用程序在本地存储访问令牌并将其用于对服务器的请求。访问令牌过期后,用户必须使用他的 Google 帐户再次登录移动应用程序。
我对仅使用 Google ID 生成令牌有些担心。我的意思是,任何人都可以使用某人的 Google ID 来创建令牌。坏主意:(
我是否应该更好地使用 JWT 作为令牌?
感谢您的帮助!
- 您应该将用户的
id_token
发送到 API 而不是
有几个不同的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。
我必须为移动应用程序开发 RESTful API,我对这些部分之间的通信流有些担忧。我是 API 移动设备和 OAuth 开发的新手。
共同的项目应该这样工作:
- 用户只能使用他们的 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)和 returns 移动应用程序的访问令牌。
5) 移动应用程序在本地存储访问令牌并将其用于对服务器的请求。访问令牌过期后,用户必须使用他的 Google 帐户再次登录移动应用程序。
我对仅使用 Google ID 生成令牌有些担心。我的意思是,任何人都可以使用某人的 Google ID 来创建令牌。坏主意:(
我是否应该更好地使用 JWT 作为令牌?
感谢您的帮助!
- 您应该将用户的
id_token
发送到 API 而不是 有几个不同的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。