2012-08-10 42 views
1

我一直在关注很多关于REST API和安全性的问题,并发现了一些有趣的信息,但仍然有一件事我不明白。因此,我有一个使用Zend框架开发的REST API,通过https通道进行基本身份验证(因此,如果我忽略了我读取的内容,登录名/密码在发送时会加密)。 此API的目的是由Android/iPhone应用程序调用,并且只会提供给拥有登录名和密码的人使用Zend创建安全REST API的最佳方式是什么?

因此,目前要调用API,登录名和密码始终与呼叫等等,每次调用都会检查它们(结果是每次调用API时都会调用数据库来进行身份验证)。

是否有某种会话管理(如在web开发中)来避免这种情况?

感谢,

回答

0

REST API应该是无状态的,但你可以使用一些秘密密钥您第一次提交的用户名+密码后获得使用请求签名。

换句话说,不要每次都发送用户名和密码,只需使用一次,即可获得密钥。

您可以看看签名请求的几个API,例如。一些实施OAuth。

+0

因此,如果我明白,第一次请求,我发送用户名和密码,然后服务器发送给我一个秘密密钥,然后由客户端用来调用API。 因此,我必须在数据库中存储这个秘密密钥(我想我必须生成一个“随机”),所以我仍然必须在每次调用时在数据库中提出请求。第二个问题:该密钥应该有效多久? 我看了一下twitter是如何工作的(它使用OAuth2),但我不得不承认我没有真正理解:/ – Olivier 2012-08-10 21:35:13

+0

@ user1571681:基本上“取决于”:)你必须基本上能够使用相同的秘密即使你没有在第一个请求(你使用这个秘密签署请求)之后的任何请求中交换它,也可以在客户端和服务器上键入。这个秘密不需要存储在数据库中,但它是最常用的方法。它应该是随机的,因此很难猜测,但如果您不需要这种安全性,则不是必需的。您可以以您想要的方式使密钥无效 - 它可能是永久的,但根据您的API选择合理的时间限制。 – Tadeck 2012-08-10 22:24:25

+0

@ user1571681:说到OAuth,起初可能很难理解,但线索是用户在Twitter网站上进行身份验证,然后被重定向到传递给客户端应用程序的特定访问令牌。然后,客户端应用程序将它交换为请求令牌,该令牌被用作我描述的密钥。 API中的每个请求都应该进行签名(根据标识请求的信息构建字符串,例如HTTP方法,主体,内容类型等),然后附加密钥,然后使用例如'sha1'算法对整个事物进行哈希处理。您负责使用您的API,但可能基于OAuth。 – Tadeck 2012-08-10 22:28:08

相关问题