向 3rd 方服务请求获取令牌是一种不好的做法吗?

Is it a bad practice to make request to 3rd party service to get token?

假设这样的场景: 我正在构建与用户上传到我的 AWS S3 帐户的服务。 使用我的服务的每个站点都必须有直接上传到 S3 的上传表单。为此,每个站点都必须使用 AWS 签名版本 4 对其上传表单进行签名。 问题是签名需要 AWSAccessKeyId 和 AWSSecretAccessKey,我必须将它们共享给我的服务用户,这是不可接受的。 我以为我可以在我这边生成所有需要的签名数据,并在用户(站点)要求时回复它。

所以问题是:为了签署上传表单网站(它将把文件上传到我的 S3)必须向我的服务器请求签署数据(XHR)是个坏主意或服务器端)?

我不完全确定你在问什么,但如果你问代表各个站点自己签署上传是否是个坏主意,那么答案是否定的......警告。

对上传进行签名(实际上,您应该只对上传进行签名 URL)比向其他域提供您的访问密钥安全风险要小得多。这就是它的用途,允许匿名上传。签署请求仅授予 site/user 上传权限,但不考虑上传者或上传内容。

这是您自己的安全检查需要介入的地方。如果表单托管在多个域上(全部上传到您的 S3 存储桶),您应该首先检查表单的来源域,以避免有人将他们自己的网络服务器上的表单并尝试上传内容。根据您的各种站点的配置方式,有几种方法可以做到这一点,不幸的是我不是专家。

其次,您需要验证上传的数据。是纯文本、二进制等?在开始上传之前,您需要验证所有这些。

希望对您有所帮助。