【问题标题】:What is the Best way to create a secure REST API with Zend?使用 Zend 创建安全 REST API 的最佳方法是什么?
【发布时间】:2012-08-11 03:45:35
【问题描述】:

我一直在研究很多关于 REST API 和安全性的问题,发现了一些有趣的信息,但还有一件事我不明白。

所以,我有一个使用 Zend Framework 开发的 REST API,通过 https 通道进行基本身份验证(因此,如果我了解我所阅读的内容,登录/密码在发送时会被加密)。 此 API 的目的是由 Android/iPhone 应用程序调用,并且仅对拥有登录名和密码的人可用

所以,目前,为了调用 API,登录名和密码总是随调用一起发送,因此,我在每次调用时检查它们(结果是它调用数据库只是为了在每次调用API)。

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

谢谢,

【问题讨论】:

    标签: api zend-framework rest


    【解决方案1】:

    REST API 应该是无状态的,但您可以使用在首次提交用户名 + 密码后获得的某个密钥来使用请求签名。

    也就是说,不要每次都发送用户名和密码,只用一次,获取秘钥。

    您可以查看几个对请求进行签名的 API,例如。一些实现 OAuth。

    【讨论】:

    • 所以,如果我理解的话,首先请求,我发送用户名和密码,然后服务器向我发送一个密钥,然后客户端使用该密钥调用 API。所以,我必须在数据库中存储这个密钥(我想我必须“随机”生成一个),所以我仍然必须在每次调用时在我的数据库中发出请求,对吗?第二个问题:这个密钥应该有效多长时间?我查看了 twitter 的工作原理(它使用 OAuth2),但我不得不承认我并没有真正理解:/
    • @user1571681: 基本上“这取决于”:) 您必须基本上能够在客户端和服务器上使用相同的密钥,即使您在第一次之后没有在任何请求中交换它一个(您正在使用此密钥签署请求)。这个秘密不需要存储在数据库中,但它是最常用的方法。它应该是随机的,因此很难猜测,但如果您不需要那种安全性,它不是必需的。您可以以您想要的方式使密钥失效 - 它可能是永久性的,但根据您的 API 选择合理的时间限制。
    • @user1571681:说到 OAuth,一开始可能很难理解,但线索是用户在 Twitter 网站上进行身份验证,然后使用传递给客户端应用程序的特定访问令牌重定向。然后客户端应用程序将其交换为请求令牌,该令牌用作我描述的密钥。您的 API 中的每个请求都应该被签名(从标识您的请求的信息构建字符串,例如 HTTP 方法、正文、内容类型等 - 并附加密钥,然后使用例如 sha1 算法对整个事物进行哈希处理)。您负责您的 API 使用什么,但可能基于 OAuth。
    • 感谢您的所有回复。我刚刚观看了这个长视频 (youtube.com/watch?v=M42ouAgPCQI),我知道 OAuth 的工作原理,我放了链接,因为我认为这是一个非常好的视频。我可能会将密钥存储在我的数据库中,但存储在一个小表中(以提高选择性能)。我还将选择永久密钥,让用户能够从他在网站上的个人资料中撤销它(例如,它是移动设备被盗的)。好吧,现在我必须找出是否有一种简单的方法可以使用 Zend Framework 构建 OAuth 服务器...... :)
    • @user1571681:很好,很高兴您解决了您的问题 :) 在使用 Zend 框架(或任何其他框架)构建 OAuth 时,您正在寻找 OAuth 提供者 i> 库或模块。我不知道,如果您链​​接的剪辑中对此进行了描述(我希望自己观看),但您的 API 将是 OAuth 提供者 (因此您可以使用现有模块),如与 OAuth 消费者(移动应用程序/网站)相反。您可以开始在 ZF herehere(均为 2010 年)中寻找 OAuth 提供程序。
    猜你喜欢
    • 2011-05-14
    • 2012-04-06
    • 2015-11-13
    • 2012-06-17
    • 2017-08-06
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多