我可以在REST API上获得一些帮助.我在写一个 node .使用Express、MongoDB和主干网的js应用程序.js在客户端.在过go 的两天里,我一直在努力解决这一切,但运气不太好.我已经退房了:

我希望后端和前端尽可能分开,所以我认为使用精心设计的REST API会很好.我的 idea 是,如果我有时间开发iPhone应用程序(或其他类似的应用程序),它可以使用API访问数据.

但是,我希望这是安全的.一个用户已登录到我的web应用,我想确保我的API是安全的.我读过关于OAuth、OAuth 2.0、OpenID、Hmac、哈希等的文章...我希望避免使用外部登录(Facebook/Twitter等),我希望在我的应用程序/服务器上注册和登录.

...但我还是很困惑.也许已经是深夜了,或者我的大脑已经崩溃了,但我真的可以在这里做些什么.创建安全API的步骤是什么?

任何帮助,任何信息,任何例子,步骤或任何东西都将是伟大的.请帮忙!

推荐答案

这里有一种不同的思考方式:

让我们假设您没有使用API.你的用户登录应用程序,提供一些凭据,然后你给用户一个cookie或类似的某种令牌,你用它来标识该用户已登录.然后,用户请求一个包含受限信息的页面(或创建/修改/删除该页面),因此您判断该令牌以确保允许用户查看该信息.

现在,在我看来,你唯一要改变的是信息传递的方式.您不是以呈现HTML的形式交付信息,而是以JSON的形式返回信息,并在客户端呈现它.您对服务器的AJAX请求将携带与之前相同的登录令牌,因此我建议只判断该令牌,并以同样的方式将信息限制为"仅允许用户知道的".

你的API现在和你的登录一样安全——如果有人知道访问API所需的令牌,他们也会登录到该网站,并可以访问所有信息.最好的一点是,如果你已经实现了登录,你就不需要再做更多的工作了.

OAuth等系统的目的是提供这种"登录"方法,通常是从第三方应用程序和作为开发人员.对于iPhone应用程序或类似应用程序来说,这可能是一个很好的解决方案,但这是future 的事情.API接受多个身份验证方法没有问题!

Node.js相关问答推荐

无法在我的 node 项目中转让Google Drive v3 API中的所有权

如何将信号从终端窗口发送到运行在Raspberry Pi上的Puppeteer/Node.js上的webscraper

购物车是空的状态|本地存储不更新产品数量|Redux|

Sass-TypeError:无法读取未定义的属性(正在读取';indexOf';)

npm错误;无法解析依赖项:npm ERR!对等webpack@;5.x.x;来自@webpack-cli/serve@2.0.5";

Express Web 服务器部署到 prod 但 GET 返回超时错误

Next.js 在我的电脑上没有构建错误,但它们在使用 Vercel 部署时发生

为什么我的 npm 脚本中的 glob 不起作用?

nuxt:在 docker 镜像中找不到

根据 mongoDB 中存在的唯一字符串生成唯一字符串的最佳方法

如何在 TypeScript 中输出 Hackerrank 二叉树问题?

在安装 tensorflow 时遇到问题

node.js 中 pdfkit-tables 中的垂直线

Cassandra node.js 驱动程序有替代品吗?

如何使用 superagent/supertest 链接 http 调用?

什么是nestjs错误处理方式(业务逻辑错误vs.http错误)?

在 ExpressJS 中将变量传递给 JavaScript

如何以编程方式检测nodejs中的调试模式?

我可以有条件地将 where() 子句添加到我的 knex 查询吗?

npm WARN 不推荐使用 graceful-fs@3.0.8:graceful-fs 版本 3