Rest 保护应用程序外调用的api数据

Rest 保护应用程序外调用的api数据,rest,api,security,jwt,token,Rest,Api,Security,Jwt,Token,假设我们有一个api端点(例如:REST)和一个react web应用程序来连接它 这就是我所做的身份验证和授权 当用户发送登录请求时,我为该用户创建一个令牌(例如:JWT),然后用户可以使用该令牌发送查询或变异请求 为此,我将令牌保存在localStorage或Cookie中,用户自己可以看到它 对于一个简单的应用程序来说,这没关系,但是如果我想让用户都不能使用这个令牌,并且令牌只在我的react应用程序(我的网站)中起作用,该怎么办 例如,如果john doe访问了一个网站,并且该网站为他

假设我们有一个api端点(例如:REST)和一个react web应用程序来连接它

这就是我所做的身份验证和授权

当用户发送登录请求时,我为该用户创建一个令牌(例如:JWT),然后用户可以使用该令牌发送查询或变异请求

为此,我将令牌保存在localStorage或Cookie中,用户自己可以看到它

对于一个简单的应用程序来说,这没关系,但是如果我想让用户都不能使用这个令牌,并且令牌只在我的react应用程序(我的网站)中起作用,该怎么办

例如,如果john doe访问了一个网站,并且该网站为他创建了一个令牌,他可以复制该令牌并在第三方应用程序中使用它,或者创建一个bot来调用该网站的API

我想创建一个api,即使它的用户也不能使用他们的令牌从我的应用程序前端调用api

一些应用程序正在这样做,但我不知道怎么做,例如电报、推特或

他们从服务器返回的数据是加密的

但如果我们可以访问他们的web应用程序的源代码,那么我们应该能够找到他们的加密令牌或方法,但我们不能这样做(我猜),我不知道他们是如何阻止这一点的

我读过RSA,但如果我们在前端保留公钥,这不会有任何区别(对吗?)

那么怎么做呢? (保护api,防止调用特定web应用)

简单应用 对于一个简单的应用程序,这是可以的

这取决于您通过这个简单的应用程序公开的数据,因为在欧洲,例如,由于缺乏安全措施,GDPR法律对任何最终导致个人身份信息(PII)数据泄露的人都非常严格,而应用程序的复杂性对法律来说并不重要。因此,无论是简单的还是复杂的应用程序,如果您正在处理PII,请确保在您的应用程序中应用所有最佳安全实践

挑战 但是,如果我想让用户都不能使用这个令牌,而令牌只能在我的react应用程序(我的网站)中工作,那该怎么办

你给自己带来了一个很难解决的问题,这是由于网络是如何构建的,这是因为在浏览器中,你可以点击F12或检查页面源来获取秘密,获取cookies,查看本地数据库中存储的内容,等等

谁在访问API服务器 例如,如果john doe访问了一个网站,并且该网站为他创建了一个令牌,他可以复制该令牌并在第三方应用程序中使用它,或者创建一个bot来调用该网站的API

在我开始解决这一巨大挑战之前,您必须清楚地了解调用API服务器的人和人之间的区别,为此,您可以阅读我写的部分,其中我引用了以下内容:

什么是向API服务器发出请求的东西。它真的是你的移动应用程序的真实实例,还是一个机器人、一个自动脚本或一个攻击者用Postman之类的工具在你的API服务器上手动戳来戳去

是移动应用程序的用户,我们可以通过多种方式进行身份验证、授权和识别,比如使用OpenID Connect或OAUTH2流

如果这句话不够清楚,那就花几秒钟阅读链接文章的整个部分

现在,您已经清楚地了解了访问API服务器的是谁(Joe)和是什么(第三方应用程序、机器人、邮递员、cURL等),您可以开始应用尽可能多的防御层,这是法律所要求的

保护API服务器 我想创建一个api,即使它的用户也不能使用他们的令牌从我的应用程序前端调用api

与中世纪城堡一样,API防御分层次进行:

  • 只使用HTTPS保护传输层,您可以使用免费的
  • 添加、使用检查它们,并在它们上启用以实时了解浏览器中发生的违规行为
  • JWT按首选项加密的令牌()或至少有签名的令牌()
  • 用至少一个开源工具混淆Javascript,例如
  • 在请求上签名,然后使用来帮助您
  • 使用谷歌或其他供应商提供的类似工具。这种类型的recaptcha不需要用户交互
  • API服务器前面的Web应用程序防火墙()
  • 用户行为分析(),将使用人工智能(AI)尝试区分什么
那么怎么做呢?(保护api,防止调用特定web应用程序)

因此,即使您应用了上述列表中的所有安全层,您也无法将API服务器真正锁定到React应用程序,但这确实会使绕过API服务器变得更加困难,就像您已经注意到的那样:

Some of the applications are doing this but I don't know how, for example telegram or twitter or ...
现在,你可能会说WAF和UBA解决方案超出了你的口袋范围,那么我的建议是,至少你在API服务器前面放一个CDN,因为有些CDN免费提供一些安全好处,但我必须说,它们保护更好的传统网站,这些网站有专用的后端,而不是API,但有些东西比什么都好

因此,归根结底,我们需要花费更多的时间来攻击你的API服务器和应用程序,以阻止普通脚本的孩子和技能较低的黑客,因为他们只是在追逐容易攻击的目标,也就是较低的悬念。请记住,熟练的黑客总能找到一条出路,但这些黑客正在寻找高价值的目标,也就是树顶上的果实,即使有梯子也不容易找到;)

多走一英里 如果要完全充电以保护API服务器,则需要遵循OWASP项目:

OWASP API安全项目旨在为软件提供价值