OAuth 2 适用于我拥有的移动客户端


OAuth 2 For Mobile Clients That I Own

我有一个公开REST API的LAMP-stack网络应用程序。目标是拥有 3 层 - databse、服务 (REST) 和多个前端客户端(网站、Android、iPhone)。目前,这些层都在同一框中。网站使用 API 调用 CRUD 操作的服务逻辑,移动客户端尚未构建。

我正在使用 PHP bcrypt 实现来存储用户凭据。这在设计上很慢/占用大量 CPU。每个 API 调用都需要一个用户名/密码对以及 API 参数。这将阻碍大规模扩展,因为哈希是每次 API 调用时计算的。

所以,我一直在寻找替代方案。OAuth 2.0 使用可撤销的令牌,使用起来并不昂贵,但我读过的文章似乎表明该协议的主要用例是让第三方访问我的 API。这不太适合我的模型,例如,移动客户端归我所有。

  1. OAuth 是否仅用于第三方,或者公司是否通常将其移动客户端添加为自己的 API 的 OAuth 使用者?

  2. 是否可以将共享密钥与我发布到应用程序市场的 Android/iPhone 应用程序捆绑在一起,以便它们能够立即与 API 关联?

oAuth v2 (http://oauth.net/2/) 具有许多身份验证模式(总共 6 种),尽管最终用户授权第三方应用程序的"三条腿"方案是最明显的,但即使您拥有这些应用程序,也绝对是一个好方法。

您可以使用两条腿流,例如受信任的凭据流 https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-25#section-4.3。基本上,您信任客户端代码(您编写的)来接收并查看用户的用户名和密码并将其发送到您的API。完成后,oAuth 令牌将正常发放,密码无需再次通过连接。

关于共享密钥的第二个问题 - 如果您的应用程序始终需要用户登录,那么您可能能够避免将共享密钥放入应用程序,因为您的身份验证依赖于用户凭据(在这种情况下,只需在应用程序中输入 ID,以便您知道它是哪个版本)。如果应用程序在某些模式下无需用户登录即可运行,那么您可能别无选择,只能至少为初始化步骤嵌入某种秘密。