如何在不登录的情况下保护RESTAPI

如何在不登录的情况下保护RESTAPI,api,rest,security,authentication,Api,Rest,Security,Authentication,我正在构建一个服务,提供一些只读信息,这些信息将在多个网站中使用,有些是登录的,有些是公共的 我不想让api公开给任何网站,所以我不确定我应该使用什么身份验证方法。我有一些想法,但我不想重新发明轮子 我在考虑让这个站点的后端使用一个秘密/密码/私钥向我的服务器请求一个令牌,然后他们应该将这个令牌传递给他们的前端,并将它与每个请求一起传递给我的服务器。如果你的站点可以访问你的公共非认证API,他们的前端将直接与我的API通信,无法阻止其他人使用此API并窃取您的数据 您可以通过不使用CORS头阻止

我正在构建一个服务,提供一些只读信息,这些信息将在多个网站中使用,有些是登录的,有些是公共的

我不想让api公开给任何网站,所以我不确定我应该使用什么身份验证方法。我有一些想法,但我不想重新发明轮子


我在考虑让这个站点的后端使用一个秘密/密码/私钥向我的服务器请求一个令牌,然后他们应该将这个令牌传递给他们的前端,并将它与每个请求一起传递给我的服务器。如果你的站点可以访问你的公共非认证API,他们的前端将直接与我的API通信,无法阻止其他人使用此API并窃取您的数据

您可以通过不使用CORS头阻止其他网站直接从您的API获取数据,但如果您的网站公开显示来自您的API的数据,则假定其他任何网站都可以


如果您的业务依赖于不可能,请重新考虑您的业务模式。如果数据出现在随机用户的屏幕上,这意味着用户可以将该数据放在其他地方。这就是web的工作方式。

如果您的站点可以访问您的未经身份验证的公共API,则无法阻止其他人使用此API并窃取您的数据

您可以通过不使用CORS头阻止其他网站直接从您的API获取数据,但如果您的网站公开显示来自您的API的数据,则假定其他任何网站都可以


如果您的业务依赖于不可能,请重新考虑您的业务模式。如果数据出现在随机用户的屏幕上,这意味着用户可以将该数据放在其他地方。这就是网络的运作方式。

我完全同意@Evert。话虽如此,您可以使用一些方法使公共API对某些人而不是所有人都可访问。它并不完美,大多数时候使用某种API令牌将是一个更好的解决方案,但它可能适合您的需要

首先,您可以使用防火墙规则,只允许来自某些IP的连接。简单,只要源IP不变,就可以工作


你可以使用的另一个想法是:看看youtube和私人视频是如何工作的。URL中有一个秘密。有了足够的熵,你可以通过这种方式构建公开访问的URL,它可以用来与朋友共享一个简单的链接,但其他人很难猜到。这种技术有缺点。你可能只允许人们以这种方式分享他们的内容,因为他们始终有权通过将链接粘贴到推特/yt/other中来公开链接。

我完全同意@Evert。话虽如此,您可以使用一些方法使公共API对某些人而不是所有人都可访问。它并不完美,大多数时候使用某种API令牌将是一个更好的解决方案,但它可能适合您的需要

首先,您可以使用防火墙规则,只允许来自某些IP的连接。简单,只要源IP不变,就可以工作

你可以使用的另一个想法是:看看youtube和私人视频是如何工作的。URL中有一个秘密。有了足够的熵,你可以通过这种方式构建公开访问的URL,它可以用来与朋友共享一个简单的链接,但其他人很难猜到。这种技术有缺点。您可能只允许人们以这种方式共享他们的内容,因为他们始终有权通过将链接粘贴到他们的tweer/yt/other中来公开链接