我不确定您的开发人员是否能够安全地做到这一点,而无需与他们自己的主机进行某种形式的通信以及他们系统上某种形式的用户帐户。正如您所说,如果您在应用程序中包含一个长期存在的令牌,那么无论进行何种混淆,最终都可以通过逆向工程技术发现它。
我可以看到 2 个选项:
1. 短命代币
在此方案中,移动应用程序联系开发人员的系统以接收简短的身份验证令牌。在注册期间和之后定期,开发人员会生成一个公私密钥对并为您提供公钥。
每个身份验证令牌都需要包含某种未加密的“开发人员密钥 ID”和加密的数据位,包括令牌的发行数据和伪随机数据的盐。开发人员的主机将使用公私钥对中的私钥加密数据。这将秘密保存在受控和安全的空间中。加密数据需要包含盐,以防止对开发人员密钥的已知明文攻击。
该应用程序将令牌发送给您,您可以通过以下方式确定其合法性:
- 使用未加密的开发人员密钥 ID 来确定在解密加密字符串时使用哪个密钥。
- 开发者密钥 ID 是否已被撤销或过期?(由于密钥泄露、开发 API 订阅到期或滥用等)。如果它被撤销,拒绝访问。
- 令牌中的加密数据是否正确解密?如果不是,拒绝访问。
- 令牌是否已过期?(基于加密令牌日期)如果是这样,告诉客户端从开发服务器获取新令牌。他们的软件应该在联系您的 API 之前执行此操作,但您必须检查以防万一。我建议允许令牌存活相对较短的时间,因为在应用程序之间复制令牌是一个弱点。
- 允许访问
您也可以使用对称加密而不是公私钥加密,但是您和开发人员都知道这个秘密。如果只有开发人员知道它会更安全。
2.通过开发主机传递API调用
移动应用程序可能会与其开发人员的主机而不是您的主机交谈以调用 API。当开发主机收到其中一个调用时,它只是将调用传递给您的 API 并添加其秘密令牌。