如何保护基于Rest的API?

如何保护基于Rest的API?,rest,post,get,Rest,Post,Get,我们打算开发基于rest的api。我探讨了这个主题,但似乎当你的客户端是应用程序时,你可以保护api,所以有很多方法,公钥-私钥等。那么网站/移动网站呢,如果我们在网站中访问基于rest的api,并且不使用任何登录来访问内容,那么登录将是可选的,那么我们如何限制其他人访问基于rest的api 使用Oauth2.0有意义吗?我不太清楚 更清楚的问题可能是,对于不使用任何登录的网站,我们如何保护通过web公开的get或post请求 如果是简单的get请求或post请求,它将返回特定输入的json数据

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

使用Oauth2.0有意义吗?我不太清楚

更清楚的问题可能是,对于不使用任何登录的网站,我们如何保护通过web公开的get或post请求


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

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

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

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

您可以构建自己的客户机应用程序,并将其发送给其他人,这些人可以使用客户机的打包证书通过服务器进行自我验证。例如,如果您为该设备构建,iOS具有此类功能。 您可以下载在浏览器中“安装”并在与REST API通信时使用的证书 使用类似于握手协议的东西,这样当客户机想要发出第一个请求时,它会说:您好,我是客户,我们可以聊天吗?服务器回答“是,在接下来的X分钟内,我们可以确保您每次告诉我一些事情时都向我发送此密钥yyyy”您可以在iOS以外的其他设备上使用类似或等效的设备。
可能还有其他的,但你知道基本的想法。在我看来,如果您的资源不需要授权,那么您就不需要保护RESTAPI。我可以问一下,您通过这个RESTAPI或您提供的功能公开了什么样的数据吗?这可能有助于提供更好的答案。

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

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

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

您可以构建自己的客户机应用程序,并将其发送给其他人,这些人可以使用客户机的打包证书通过服务器进行自我验证。例如,如果您为该设备构建,iOS具有此类功能。 您可以下载在浏览器中“安装”并在与REST API通信时使用的证书 使用类似于握手协议的东西,这样当客户机想要发出第一个请求时,它会说:您好,我是客户,我们可以聊天吗?服务器回答“是,在接下来的X分钟内,我们可以确保您每次告诉我一些事情时都向我发送此密钥yyyy”您可以在iOS以外的其他设备上使用类似或等效的设备。
可能还有其他的,但你知道基本的想法。在我看来,如果您的资源不需要授权,那么您就不需要保护RESTAPI。我可以问一下,您通过这个RESTAPI或您提供的功能公开了什么样的数据吗?这可能有助于提供更好的答案。

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

要解决这个问题,您需要身份识别:一种让服务器知道谁是谁或是什么的方法,这样才能做出正确的决定

根据您对安全性的关注程度,有许多不同的方式来提供某种形式的标识

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

在此基础上,有3种选择:

其实不需要安全,不用麻烦了 安全性并不是真正需要的,但您仍然希望将访问API的权限限制在合法用户/代理或准备投入一些时间破解您的保护的人身上——使用特定的用户代理或客户端嵌入的秘密——不要在其中投入太多,因为它不会阻止真正想要访问它的人 安全性是必需的——而且我认为没有办法绕过身份验证,不管是登录/密码,还是特定于用户的设备?密钥、OpenID等。。。不管怎样,您都必须在一定程度上增加用户负担,尽管您可以通过允许身份验证持久化cookie、存储。。。。
您需要授权:应该只允许某些代理、移动客户端和/或用户访问这些API

要解决这个问题,您需要身份识别:一种让服务器知道谁是谁或是什么的方法,这样才能做出正确的决定

根据您对安全性的关注程度,有许多不同的方式来提供某种形式的标识

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

在此基础上,有3种选择:

其实不需要安全,不用麻烦了 安全性并不是真正需要的,但您仍然希望将访问API的权限限制在合法用户/代理或准备投入一些时间破解您的保护的人身上——使用特定的用户代理或客户端嵌入的秘密——不要在其中投入太多,因为它不会阻止真正想要访问它的人 安全性是必需的——而且我认为没有办法绕过身份验证,不管是登录/密码,还是特定于用户的设备?密钥、OpenID等。。。不管怎样,您都必须在一定程度上增加用户负担,尽管您可以通过允许身份验证持久化cookie、存储。。。。
你说的“安全”是什么意思?i、 e.您试图防范什么威胁?好的,这是简单的get请求或post请求,它将返回您特定输入的json数据,现在我有了移动网站,谁将访问这些get请求或post请求来获取数据。嗯,其他人也可以访问它,问题是我没有使用登录,用户可以直接访问数据。但是怎样才能限制其他人访问这些网站呢?谢谢你对通过网站访问的回应,请参见。你所说的“安全”是什么意思?i、 e.您试图防范什么威胁?好的,这是简单的get请求或post请求,它将返回您特定输入的json数据,现在我有了移动网站,谁将访问这些get请求或post请求来获取数据。嗯,其他人也可以访问它,问题是我没有使用登录,用户可以直接访问数据。但是,如何限制其他人访问该对象,感谢通过网站访问的响应,另请参见。嗨,数据是JSON格式的,它将是JSON对象,包含简单的数据,如文本字段值、数字、对象描述,这将填充在Web UIYes中,因为它将是网站的核心信息,如果无需登录即可访问,这意味着任何人都可以使用我们的服务获取数据,并将在其私人应用程序/网站中发布。除非您向所有将访问您网站的人颁发密钥/证书,否则您无法保护网站,或者您需要重新考虑使用登录!您好,数据是JSON格式的,它将是JSON对象,包含简单的数据,如对象的文本字段值、数字、描述,这将填充在Web UIYes中,因为它将是网站的核心信息,如果无需登录即可访问,这意味着任何人都可以使用我们的服务获取数据,他们将在他们的私人应用程序/网站中发布。除非您向访问您网站的所有人颁发密钥/证书,或者您需要重新考虑使用登录,否则您无法保护网站!