繁体   English   中英

如何保护基于Rest的API?

[英]How to secure Rest Based API?

我们打算开发基于REST的API。 我探讨了该主题,但看来,当您的客户端是应用程序时,您可以保护api(因此有很多方法,例如公钥-私钥等)。 那么网站/移动网站呢,如果我们正在访问不使用任何登录名访问内容的网站中基于Rest的api(登录将是可选的),那么我们如何限制其他人访问基于rest的api?

使用Oauth2.0是否有意义? 我对此不清楚。

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

如果这是简单的get request或post request,它将在特定输入上返回json数据,那么我现在拥有移动网站,该网站将使用get request或post request访问这些数据以获取数据。 好吧,其他人也可以访问它,问题是我没有使用登录名,用户可以直接访问数据。 但是我们如何限制其他人访问该数据。

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

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

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

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

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

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

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

提供多种形式的身份验证的方式有很多,具体取决于您对安全性的重视程度。

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

从那里,有3个选择:

  1. 并不是真正需要安全性,不要打扰
  2. 并不是真正需要安全性,但是您仍然想将对API的访问限制为合法用户/代理或准备投资一些时间来破坏保护的人员-使用特定的用户代理或客户端嵌入的机密-不要投资因为它不会阻止真正想要访问它的人
  3. 需要安全性-然后我认为没有办法解决身份验证,无论是登录名/密码,特定于用户(特定于设备的密钥),OpenID等等,无论如何,您都必须添加尽管可以通过允许身份验证持久化(Cookie,存储...)来限制该负担,但在一定程度上减轻了用户负担

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM