为什么不鼓励在前端使用 OAuth 密钥?

Why OAuth keys on the front-end are discouraged?

我正在开发一个应用程序,该应用程序将使用社交登录以便 post 在 Facebook、Twitter 等上发送消息,并且我阅读了很多帖子说 OAuth 密钥应该保存在服务器端出于安全原因。

我知道这听起来像是一个愚蠢的问题,但为什么会这样?如果我创建了一个只允许管理登录和消息 posts 的 Facebook 应用程序,可能发生的最糟糕的事情是一些坏人获取了存储在前端的密钥并使用它们来登录和post 一条消息,但没有别的,所以他不能造成任何伤害...

显然,我仍在努力理解整个过程是如何运作的,所以我还不是专家。

为了完整起见,整个程序将成为一个 Electron 桌面应用程序,我试图通过没有服务器来发布消息来降低成本,甚至没有无服务器后端在 AWS 上。

预先感谢您的回答!

试着从邻居信任的角度考虑一下。

您有住在您左边房子里的邻居莱尼和住在您右边房子里的另一个邻居朗达的钥匙。您认识 Rhonda 好几年了,她相信您会保留一份她的钥匙,以防她被锁在门外或丢失钥匙。

Lenny 很新,但你和他喝过一次酒,他看起来是个通情达理的人。你不知道的是,莱尼从一个小镇搬到这里,他从来不锁门。

你周末要离开,让莱尼过来给你的猫依偎一些牛奶。 Lenny 把你的钥匙带到你家,但他不知道住在街对面的 Brad the Bad Guy 正在看着他,并且看到你早些时候离开。

现在 Lenny 去上班了,没有锁他的房子。通常这不是问题,因为莱尼过着非常简单的孤独生活,几乎没有财产,但布拉德知道他有你的钥匙。布拉德偷了你的钥匙,去偷了你全新的电视,而在你家里,他找到了朗达的钥匙(他也偷了),然后去偷了她的电视。他将两把钥匙放回找到它们的地方,returns 带两台电视回家。现在莱尼回家了,当他来给你的植物浇水时,他惊呆了,发现电视不见了,房子也锁上了。他打电话给警察,警察立即怀疑莱尼,因为他有钥匙。

别像 Lenny,锁上你的房子(api 钥匙),即使你是一个善良且值得信赖的人。

编辑:关于电子应用程序可能出什么问题的问题。想象一下,我丢失了我的 Twitter API 键。现在 Brad 开始制作仿冒应用程序。它与我的非常相似,如上所述,从 Twitter 的角度来看,他的应用程序与我的应用程序没有区别。也许 API 键不仅具有 post 权限,它还具有删除权限。现在 Brads 仿冒应用程序可以删除人们的 Twitter 帐户和 post 恶意软件或其他东西。 Brad 是这样做的人,但 Twitter 来找我并指责我 运行 垃圾邮件机器人。他们预防性地禁用了我的 API 密钥,现在我所有的合法客户都非常生气,并质疑我应用程序其他区域的安全性。我的声誉受到影响,人们说我的应用程序是 "infected",因为推文显示为由我的应用程序而不是 Brads 应用程序编辑的 post。如果 Twitter 确定你不能保证你的密钥安全,他们可能会停止向你发放新密钥。