您可以部署您的合法客户端与API之间的相互认证的SSL。生成自签名的SSL客户端证书并将其存储在您的客户端中。将您的服务器配置为需要客户端身份验证,并且只接受已部署到客户端的证书。如果某人/某些尝试连接的东西没有该客户端证书,则将无法建立SSL会话并且不会建立连接。假设您控制合法客户端和服务器,则您不需要CA颁发的证书;由于您同时控制客户端和服务器端证书信任,因此只需使用自签名证书即可。现在
,你喊一声,这真的很难防止有人逆向工程客户和恢复证书(属于客户端证书的私钥,在这种情况下)。你说得对。您通常会将该密钥(和证书)存储在某种类型的密钥库中(如果您使用的是Android,则为KeyStore
),并且密钥库将被加密。该加密基于密码,因此您需要(1)将密码存储在客户端的某处,或(2)在启动客户端应用程序时询问用户密码。你需要做什么取决于你的用例。如果(2)可以接受,那么你已经保护了你的凭证免受逆向工程,因为它将被加密并且密码将不会被存储在任何地方(但用户需要每次都键入)。如果你做了(1),那么有人能够逆向工程你的客户端,获取密码,获得密钥库,解密私钥和证书,并创建另一个能够连接到服务器的客户端。
没有什么可以做,以防止这种情况;你可以更难地对你的代码进行逆向工程(通过混淆等),但是你不能让它变得不可能。您需要确定您尝试采用这些方法缓解的风险是多少,以及需要做多少工作才能缓解风险。
OAuth步骤通过SSL。我试图保护一个API,这个API将被用户机器上运行的几个不同的客户端调用。我从OAuth流获得的认证码传递给请求的授权标头中的所有API调用。代码然后在服务器上验证。 – Evan 2012-02-21 15:17:30
它是OAuth2,它必须通过SSL。 – 2014-11-05 05:10:33