我们有一个外部供应商,要求我们在与API通信时在http请求标头中包含一个承载令牌。该令牌不应该留在未加密的代码中,因此存储它的最佳位置在哪里? “命名凭据”类型似乎不支持存储简单令牌,并且“自定义设置”选项似乎过于复杂和不必要。这是一个令牌令牌字符串,无论哪个用户,该令牌字符串都会用于每个API调用。我在google上搜索过很多东西,却没有找到有效的解决方案。
答案 0 :(得分:0)
有一些选项,但仅限于作为最终用户的代码。坚定的开发人员/系统管理员将最终了解该价值。
如果要构建托管程序包,则可以使用受保护的自定义设置(托管程序包的代码可以看到它,但客户端代码看不到,甚至是sysadmins)
检查其中一些:
您可以使用2个文本字段进行自定义设置,其中1个带有加密密钥,而1个带有加密值。看一下Crypto类。
Blob exampleIv = Blob.valueOf('Example of IV123');
Blob key = Crypto.generateAesKey(128);
Blob data = Blob.valueOf('Data to be encrypted');
Blob encrypted = Crypto.encrypt('AES128', key, exampleIv, data);
Blob decrypted = Crypto.decrypt('AES128', key, exampleIv, encrypted);
String decryptedString = decrypted.toString();
System.assertEquals('Data to be encrypted', decryptedString);
您的初始化向量可能是组织的ID或易于访问且不太可能更改的其他内容(我不知道您的供应商的API是否具有测试和生产端点,但这是一个额外的好处,在沙箱刷新后,它将无法解密确定,直到您更改自定义设置为止...您不想将测试消息发送到生产API),只需生成一次密钥并将其存储在设置中即可。