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

时间:2012-04-25 05:11:03

标签: php api authentication oauth-2.0 bcrypt

我有一个暴露REST API的LAMP堆栈webapp。目标是拥有3层 - 数据库,服务(REST)和多个前端客户端(网站,Android,iPhone)。目前,这些层都在同一个盒子上。该网站使用API​​调用CRUD操作的服务逻辑,尚未构建移动客户端。

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

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

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

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

1 个答案:

答案 0 :(得分:3)

oAuth v2(http://oauth.net/2/)有许多身份验证模式(总共6个),虽然最终用户授权第三方应用程序的“三条腿”方案是最明显的,但它肯定是即使您拥有应用程序也是很好的方法。

您可以像受信任的凭据流http://tools.ietf.org/html/draft-ietf-oauth-v2-25#section-4.3一样使用两条腿的流程。基本上在此,您信任客户端代码(您编写它)以接收和查看用户的用户名和密码并将其发送到您的API。完成后,oAuth令牌会正常发生,密码不需要再次通过连接。

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