2012-11-26 95 views
2

我们打算开发基于rest的api。我探讨了这个话题,但看起来,当你的客户端是一个应用时,你可以保护api(所以有很多方法,公钥 - 私钥等)。对于网站/移动网站来说,如果我们在网站中访问基于rest的api,而不使用任何登录访问内容(登录将是可选的),那么我们如何限制其他人访问基于rest的api?如何保护基于Rest的API?

使用Oauth2.0有意义吗?我不清楚这一点。

更清晰的问题可能是,我们怎样才能保证GET或POST请求暴露在网络的不使用任何登录的网站的?

如果是简单的GET请求或POST请求,这将返回特定的输入JSON数据,现在我有移动网站,谁将会使用GET请求或POST请求来获取数据访问这些数据。那么,其他人也可以访问它,问题是我没有使用登录,用户可以直接访问数据。但是我们如何限制其他人访问这些数据。

+0

“安全”是什么意思?即你试图防范什么威胁? – ptyx

+0

好吧,这很简单,获取请求或发布请求,这将返回给您特定输入的json数据,现在我有移动网站,谁将访问这些获取请求或发布请求以获取数据。那么,其他人也可以访问它,问题是我没有使用登录,用户可以直接访问数据。但是,如何限制其他人访问它,感谢您的回复 – Pradeep

+0

要通过网站访问,请参阅[REST身份验证和公开API密钥](http://stackoverflow.com/questions/5472668/rest-authentication-and-曝光 - 的-API键)。 – Arjan

回答

3

你认为什么是确保未使用REST VS一个正在使用REST API网站之间的区别?

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

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

  1. 你建立你船到的人,可以利用与客户端打包证书与服务器验证本身自己的客户端应用程序。例如。如果您为该设备构建iOS,则iOS具有此类功能。
  2. 你传达你的REST API时提供下载在浏览器中“安装”和使用的证书的能力
  3. 使用类似的握手协议,当客户想使它说的第一个请求; '嗨,我可以聊天吗?'服务器回应'对于下一个X分钟是肯定的,但是我们可以确保每次你告诉我一些事情YYYYYY'(你可以使用类似于SecureUDID或类似的设备,而不是iOS的其他设备)。

有可能是别人,但你得到的基本思路。同样在我看来,如果您的资源不需要授权,那么您无需保护该REST API。我可以通过您提供的REST API或功能来询问您公开的数据类型吗?这可能有助于提供更好的答案。

+0

嗨,数据是JSON格式,它将是json对象包含简单的数据,如文本字段值,数字,对象的描述,这将填充在Web UI – Pradeep

+0

它是敏感数据? – ramsinb

+0

是的,因为它将成为网站的核心信息,如果这可以在没有登录的情况下访问,这意味着任何人都可以使用我们的服务获取数据,他们将发布在他们的私人应用程序/网站 – Pradeep

1

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

为了解决这个问题,你需要鉴定:一种方法使服务器分不清谁是谁(或什么),所以可以做出正确的决定。

提供某种形式的识别有很多不同的方式,取决于您对安全性的关心程度。

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

从那里,3种选择:

  1. 安全是不是真的需要,不要打扰
  2. 安全是不是真的需要,但你仍然要限制访问您的API要么合法用户/代理商或准备好投入一些时间来打击您的保护 - 与特定的用户代理或客户端嵌入的秘密 - 不要投入太多,因为它不会阻止真正想要获取它的人
  3. 安全是必需的 - 然后我不认为有认证的方式,它是登录/密码,用户特定(设备sp ),OpenID等等......不管怎样,你都必须在某种程度上增加用户的负担,尽管你可以通过允许认证持久化(cookies,存储....)来减轻这种负担