什么是 AWS 签名认证?

what is AWS signature Authentication?

我最近在 Postman 看到了这个,而且我多次听到这个, 除了以纯文本形式发送凭证外,AWS 签名身份验证与基本身份验证有何不同?

基本身份验证内置于 HTTP 协议中。当您使用基本身份验证时,您实际上发送了完整的凭据,通常是用户名和密码。它们采用 base64 编码并在 HTTP 授权 header 中发送,如下所示:

Authorization: Basic ZGVtbzpwQDU1dzByZA==

如果你 decode 这个,你会看到它是 demo:p@55w0rd。用户名 (demo) 和密码 (p@55w0rd) 都已发送,任何可以截获明文传输的人都可以解码授权 header 以检索用户名和密码。通常您会通过 HTTPS (TLS/SSL) 发送,因此拦截应该不是问题。

签名请求是另一回事。在这种情况下,您使用一半的凭据发送请求,这在 AWS 中是访问密钥。然后,您 sign the request 使用凭据的后半部分(在 AWS 中是密钥),并将计算出的签名与您的请求一起发送。永远不会发送密钥。接收请求的服务器获取您发送的访问密钥,查找关联的密钥,对收到的请求负载进行签名,并将该签名与您发送的签名进行比较。

两者都为您提供身份验证机制,但与基本身份验证相比,AWS 签名请求有一些优势:

  • 您永远不会发送完整的凭据
  • 请求是 tamper-evident,因此攻击者无法在运行中对其进行修改
  • 请求是 time-limited,因此无法在 5 分钟后重播