我有一个带有node.js和express.js的api构建。 现在我有一个不安全的api,任何人都可以获取,发布,删除,删除记录。
我正面临以下问题。 我的其他api不应该验证用户而是应用程序。 例如,我的移动应用程序应该有一个有效的令牌来访问api。 Web应用程序也是如此。
另一个用户案例:我的api将被另一个只使用一次休息呼叫的应用程序使用。 所以代码中的某个地方我不知道在一个应用程序中我不知道(大多数情况下)我的api上的休息调用将被触发。 如何保护此类访问权限,因为不涉及cookie或会话?
我的第一个想法是,创建一个用户和一个密码。 每个api调用(通过https)必须包含凭据。 密码可能会被散列。 但我读了这个
用户名和密码,会话令牌和API密钥不应出现在URL中,因为这可以在Web服务器日志中捕获并使其具有内在价值。
来自https://www.owasp.org/index.php/REST_Security_Cheat_Sheet
有什么建议吗? 我读到了oauth,但这涉及重定向,我无法想象这将如何适用于移动应用程序,例如在Android上。
有一个问题,应用程序如何首先知道用户名/密码,但如果你对一般的想法(这是安全的,只要你考虑运行应用程序的环境是安全的),那么您不必担心URL中的用户名/密码:只需使用https而不是https。
https已加密,因此只有2个端点(客户端和您的API)甚至可以读取URL。 中间的任何路由器/代理/服务器只能看到加密数据,无法访问您的用户名/密码。
而不是用户名/密码,顺便说一句,只需使用“访问令牌”,这是一个很长的(读取:难以猜测)字符串,并为每个应用程序分配一个访问令牌。 最后,您将有效令牌列表保留在数据库中,并对其进行身份验证。 如果您愿意,您甚至可以将过期日期附加到这些字符串。
将访问令牌添加为https:// url的一部分是常见做法。