18

我对 REST API 还很陌生,我意识到已经发布了很多问题。然而,仔细阅读这些实际上让我对如何处理这个问题更加困惑。

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

如果有人对正确/最安全的方法或任何很棒的教程/资源有见解。任何帮助表示赞赏。

4

1 回答 1

17

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

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

为了让服务器区分授权和未授权的呼叫,您有一些选择:

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

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

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

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

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

于 2012-10-30T19:33:57.863 回答