Eva*_*van 7 security api ssl oauth oauth-2.0
我正试图找出保护API的最佳方法.我只允许使用SSL,而我正在使用OAuth2进行身份验证,但这似乎不够.
我所关注的主要问题是,任何人都可以检查合法客户端对API发出的请求并窃取OAuth client_id.此时,他们将能够构建他们想要冒充合法客户端的任何请求.
有什么方法可以防止这种情况吗?我见过人们使用只有客户端和服务器知道的密钥才能使用参数的HMAC哈希,但我看到了2个问题.
小智 5
您可以在合法客户端和API之间部署经过相互身份验证的SSL.生成自签名SSL客户端证书并将其存储在客户端中.将服务器配置为需要客户端身份验证,并且只接受已部署到客户端的证书.如果尝试连接的某人/某些东西没有该客户端证书,则它将无法建立SSL会话并且将不会建立连接.假设您控制合法客户端和服务器,则此处不需要CA颁发的证书; 只需使用自签名证书,因为您可以控制客户端和服务器端证书信任.
现在,您确实发现很难阻止某人对您的客户端进行逆向工程并恢复您的凭据(在这种情况下属于客户端证书的私钥).而你是对的.您通常会将该密钥(和证书)存储在某种类型的密钥库中(KeyStore如果您使用的是Android),并且该密钥库将被加密.该加密基于密码,因此您需要(1)将密码存储在客户端的某个位置,或者(2)在用户启动客户端应用程序时询问用户密码.你需要做什么取决于你的用例.如果(2)是可接受的,那么您已经保护您的凭证免受逆向工程,因为它将被加密并且密码不会存储在任何地方(但用户需要每次都输入它).如果您执行(1),那么有人将能够对您的客户端进行反向工程,获取密码,获取密钥库,解密私钥和证书,以及创建另一个能够连接到服务器的客户端.
你无能为力,以防止这种情况发生; 你可以更难以对代码进行逆向工程(通过混淆等),但你不能让它变得不可能.您需要确定使用这些方法尝试缓解的风险是什么,以及为缓解这些风险需要做多少工作.
| 归档时间: |
|
| 查看次数: |
5300 次 |
| 最近记录: |