2

我们打算开发基于rest的api。我探讨了这个主题,但似乎,当您的客户端是应用程序时,您可以保护 api(所以有很多方法,公钥 - 私钥等)。网站/移动网站呢,如果我们在网站上访问基于休息的 api,而不使用任何登录来访问内容(登录是可选的),那么我们如何限制其他人访问基于休息的 api?

使用 Oauth2.0 有意义吗?我对此没有明确的想法。

更明确的问题可能是,对于不使用任何登录的网站,我们如何保护通过网络公开的获取或发布请求?

如果它是简单的获取请求或发布请求,它将返回您特定输入的 json 数据,现在我有移动网站,他们将使用获取请求或发布请求来访问这些数据以获取数据。好吧,其他人也可以访问它,问题是我没有使用登录,用户可以直接访问数据。但是我们如何才能限制其他人访问该数据。

4

2 回答 2

3

您认为保护不使用 REST 的网站与使用 REST API 的网站有什么区别?

OAuth 为您的站点提供授权功能,在 REST 架构中,这意味着移动应用程序的用户必须在被允许访问资源之前提供其凭据。然后,应用程序可以决定该用户是否有权访问所请求的资源。但是,您说过您的网站不需要使用授权。

您可以使用证书,但祝您为每个客户管理证书好运。我的看法是您的解释是您不需要保护您的网站,因为您将永远无法管理客户端和服务器之间的信任关系。不过有一些选择:

  1. 您构建自己的客户端应用程序,然后将其发送给可以使用客户端打包证书向服务器验证自己的人。例如,如果您为该设备构建,iOS 就有这种功能。
  2. 您提供下载“安装”在浏览器中并在与 REST API 通信时使用的证书的功能
  3. 使用像握手协议这样的东西,所以当客户端想要发出它说的第一个请求时;“嗨,我是客户,我们可以聊天吗?” 并且服务器响应“是的,在接下来的 X 分钟内,我们可以确保每次您告诉我一些 YYYYYY 的事情时都向我发送此密钥”(您可以使用SecureUDID 之类的东西,或者对 iOS 以外的其他设备使用类似的东西)。

可能还有其他人,但您了解基本概念。我再次认为,如果您的资源不需要授权,那么您就不需要保护该 REST API。我可以问一下您通过此 REST API 或您提供的功能公开什么样的数据?这可能有助于提供更好的答案。

于 2012-11-27T07:21:39.853 回答
1

您需要授权:应该只允许一些代理(移动客户端)和/或用户访问这些 API。

要解决这个问题,您需要识别:一种让服务器分辨谁是谁(或什么)的方法,以便做出正确的决定。

有许多不同的方式来提供某种形式的身份证明,这取决于您对安全性的关心程度。

最简单的是用户代理字符串,特定于您的移动客户端。但它很容易被伪造。稍微难以伪造的是基于客户端的“秘密”——在您的移动客户端代码中嵌入某种秘密或密钥。你可以让它变得非常复杂和秘密,但正如 ramsinb 指出的那样,你不能以这种方式获得安全性,因为它需要你能够保证你与客户端一起提供的秘密(无论是代码、算法还是任何其他花哨的构造)都不能被破坏或逆向工程。当您不控制客户端时不会发生。

从那里,3个选择:

  1. 安全并不是真正需要的,不要打扰
  2. 安全性并不是真正需要的,但您仍然希望将 API 的访问权限限制为合法用户/代理或准备投入一些时间来破解您的保护的人 - 使用特定的用户代理或客户端嵌入的秘密 - 不要投资非常喜欢它,因为它不会阻止那些真正想要获得它的人
  3. 需要安全性 - 然后我认为没有办法绕过身份验证,无论是登录名/密码、用户特定(设备特定?)密钥、OpenID 等......无论如何,你都必须添加到在一定程度上给用户带来了负担,尽管您可以通过允许身份验证持续存在来限制这种负担(cookies、存储......)
于 2012-11-27T17:59:15.543 回答