1

我想直接在分布的客户端应用程序中使用 Direct Mail SDK(Java)。在应用程序中对用户进行身份验证的方式,我需要提供如下访问密钥,

IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<your accessKey>", "<your accessSecret>");

如何防止用户知道访问密钥并仍然防止需要第三方 API?可能吗?

4

2 回答 2

1

首先,编写需要在客户端上运行的机密的应用程序是一种不好的做法。您应该管理服务器上的所有内容并提供与客户端软件交互的 API。

其次,一旦传递给客户端,就无法隐藏这些凭据。您可以加密凭据,但有时客户端应用程序需要解密它们。即使是业余程序员也能弄清楚你是如何处理你的凭证的。

忽略上述建议,阿里云支持提供临时访问密钥的 STS。使用您的阿里巴巴凭据,您将调用 AssumeRole,它创建临时访问密钥,授予用户权限调用 DirectMail。您可以限制凭据有效的时间。范围是 900 到 3600 秒。在那段时间之后,密钥变得无效。

请记住,900 秒是很长的时间。访问这些密钥的不良行为者可能会使用您的帐户发送数千封电子邮件。因此实施强用户认证、STS 和临时访问密钥。

如果您认为只保留您的界面秘密就足够了,请不要这样做。互联网上有数以百万计的脚本小子在戳每个 IP 地址。启动一个新的 ECS 实例,您将在数小时内看到攻击。

于 2018-07-28T20:14:59.097 回答
0

正如您所说,因为它是一个 Java Web 应用程序(假设),目前我想到了使用类似于 JBOSS Vault 的东西来安全地存储访问密钥。

如果它是一些独立的客户端应用程序,您仍然可以使用一些加密方法来存储数据。但这只会阻止轻松访问数据/密钥。但这并非不可能。最好的选择是创建另一个第三方 API

于 2018-07-28T19:20:45.990 回答