保护 REST API 和精简框架

2022-08-30 22:22:56

我对 REST API 相当陌生,我意识到已经发布了不少问题。但是,仔细阅读这些实际上使我对如何处理此问题更加困惑。

我使用Slim Framework创建了一个REST API,我只是用它来传输数据。我不会使用用户登录或身份验证,所以我相信为了保护这一点,我只需要一个使用公钥和私钥的系统,但我只是不确定。

如果有人对正确/最安全的方法有洞察力,或者任何教程/资源,那就太好了。任何帮助是值得赞赏的。


答案 1

您可以使用 SSL 对传输中的数据进行加密。

但SSL只是加密;服务器端 ssl 不执行客户端身份验证,也不执行授权。您可以将授权视为回答问题,即允许呼叫者执行他所要求的事情吗?建立调用方身份的身份验证或身份验证通常是执行授权的必要第一步。有时你不需要“整个身份” - 你只需要确定一个特定的方面。例如,自动洗手间大门不需要知道你是谁,而只需要知道你是男性或女性才能确定身份。同样,有些服务并不关心你是谁;如果您从特定网络(ip白名单)呼叫或携带特殊令牌,它们将允许访问。

要允许服务器区分授权呼叫和未经授权的呼叫,您有一些选择:

  • IP 白名单。如果知道将调用服务的应用或代理的 IP 地址,则可以在服务实现中指定该地址。该服务可以检查传入请求的 IP,并拒绝不在白名单上的请求。这是一种基于调用方地址的“隐式”授权。

  • 应用在每次调用中提供的机密令牌。您说您不想进行身份验证,但这是一种身份验证形式。您可以将其称为“持有者令牌”。任何携带此令牌的人都将获得授权。在服务器中,您将检查令牌的值并拒绝与已知值不匹配的任何调用。这与 IP 白名单非常相似,只是令牌是显式传递的,并且与网络地址没有任何关系。

  • 令牌 + 密钥对。这就像用户名/密码,但它可以用来验证应用程序。使用它来提供应用本身的标识。如上所述,在服务端进行检查。

  • 用户名/密码。对应用的用户进行身份验证。

您可能希望将这些组合在一起以生成所需的解决方案。换句话说,客户端请求需要来自我地址右侧,并且需要具有应用程序的令牌/密钥和用户的用户名/密码,才能被视为“授权”。


答案 2

推荐