我是REST API的新手,我发现已经发布了很多问题。然而,仔细阅读这些实际上让我对如何处理这个问题更加困惑。
我使用Slim Framework创建了一个REST API,我只是用来传输数据。我不会使用用户登录或身份验证,所以我相信要保证这一点我只需要一个使用公钥和私钥的系统,但我只是不确定。
如果有人对正确/最安全的方式有所了解,或者任何教学/资源都很棒。任何帮助表示赞赏。
答案 0 :(得分:15)
您可以使用SSL加密传输中的数据。
但SSL只是加密;服务器端ssl不对客户端进行身份验证,也不进行授权。您可以将授权视为回答问题是否允许来电者做他要求的事情?。 身份验证建立呼叫者身份或身份验证通常是进行授权的必要的第一步。有时你不需要"整个身份" - 你只需要确定一个特定的方面。例如,自动洗手间门不需要知道你是谁,但只有你是男性或女性才能确定身份。同样,有些服务并不关心你是谁;如果您从特定网络(ip白名单)拨打电话或携带特殊令牌,他们将允许访问。
要让服务器区分授权和未授权的呼叫,您可以选择以下选项:
IP白名单。如果您知道将调用您的服务的应用程序或代理的IP地址,您可以在服务实现中指定该IP地址。该服务可以检查传入请求的IP并拒绝那些不在白名单中的请求。这是一种隐含的"根据来电者的地址授权。
应用在每次通话中提供的秘密令牌。您说您不想进行身份验证,但这是一种身份验证形式。你可以将它称为"持票人令牌"。携带此令牌的任何人都获得授权。在您的服务器中,您需要检查令牌的价值,并拒绝任何与众所周知的值不匹配的来电。这类似于IP白名单,除了明确传递令牌,并且与网络地址没有任何关系。
令牌+密钥对。这就像用户名/密码,但它可用于验证应用程序。使用此选项可提供应用程序本身的标识。如上所述检查服务方面。
用户名/密码。验证应用程序的用户。
您可能希望将这些组合在一起以生成所需的解决方案。换句话说,客户端请求需要来自正确的I地址,并且需要具有应用的令牌/密钥以及用户的用户名/密码,以便被认为是"授权的" 。