我的解决方案是否足够好,以确保对我的API的请求来自我自己的网站/手机?

我的解决方案是否足够好,以确保对我的API的请求来自我自己的网站/手机?,api,Api,我正在构建一个将由合作伙伴的网站使用的API。该网站将位于同一域(api.example.com和www.example.com)。在未来,我们可能会有一个移动应用程序使用这个API 我不希望有人将我的api用于他们自己的网站/应用程序。所以我想有一个方法来验证我的网站到我的API。 我在SO中搜索了一下,发现我必须在我的网站中设置一个Cookie,以便在每个ajax请求中发送它。很公平,但是我如何生成这个cookie呢?如果我在我的API中调用一个方法,我必须验证它的来源,这样它就不会解决问题

我正在构建一个将由合作伙伴的网站使用的API。该网站将位于同一域(api.example.com和www.example.com)。在未来,我们可能会有一个移动应用程序使用这个API

我不希望有人将我的api用于他们自己的网站/应用程序。所以我想有一个方法来验证我的网站到我的API。 我在SO中搜索了一下,发现我必须在我的网站中设置一个Cookie,以便在每个ajax请求中发送它。很公平,但是我如何生成这个cookie呢?如果我在我的API中调用一个方法,我必须验证它的来源,这样它就不会解决问题

我可以在两边设置一个加密密钥,用salt加密一些信息,然后发送给api检查信息。 我不是一个安全专家,但它似乎可以解决我的问题。这是正确的吗? 当用户登录我的网站时,使用用户的登录令牌更改此验证是否安全


谢谢

您所描述的被称为CSRF(跨站点伪造请求)

为了防止有人从您的请求外部访问您的API,您的网站应该在会话中存储一个令牌,为每个API请求传递该令牌,然后API应该验证该令牌

关于这个主题有很多好文章,包括许多具体的例子


这是其中之一

谢谢你的回答。我的问题是:我的API与网站完全解耦。如何以API能够验证的方式存储这些信息?按照我所说的方法(在网站上有一个用salt加密某些信息的密钥,并在API中有解密该信息的密钥)可以解决这个问题?如果它们完全解耦,那么API需要能够从可信来源生成密钥。您可能希望公开另一个API方法,以从密钥生成公钥(或者,只需要一个可能请求令牌的白名单主机列表),然后将公钥传递给所有后续请求。有很多方法可以实现这一点,但我需要更多关于您的安全期望和性能可伸缩性的信息。我没有很高的安全期望,我的服务没有任何敏感数据,但我只是不希望人们在我的API上乱来。也许我会使用一种类似公钥加密的机制。在这里,我对请求进行“签名”,并在API上进行验证。它比从可信来源生成密钥等简单得多,但我认为这就足够了。另一个选择是使用对称密钥加密a值以验证请求。如果您的安全期望较低,则使用对称密钥是一个不错的选择。祝你好运谢谢你的帮助!