以下是使用AK/SK(Access Key/Secret Key)进行身份验证的客户端和服务端交互过程的一般步骤:

  1. 客户端准备请求
    客户端准备发起一个请求到服务端。这个请求通常包含了要访问的资源、操作类型以及可能需要的参数。

  2. 客户端生成签名
    客户端使用其SK(Secret Key)对请求进行签名。签名过程通常包括以下步骤:

    • 对请求中的关键信息(如请求方法、资源路径、查询参数、时间戳等)进行规范化处理。
    • 使用特定的签名算法(如HMAC-SHA256)和SK对这些信息进行加密,生成签名。
    • 将生成的签名附加到请求中,通常还会包括AK、时间戳和其他可能的安全字段。
  3. 客户端发送请求
    客户端将包含签名的请求发送到服务端。请求中的AK用于标识发起请求的用户,而签名用于验证请求的合法性。

  4. 服务端验证签名
    服务端接收到请求后,会执行以下验证步骤:

    • 使用AK查找对应的SK(服务端存储了所有用户的AK和SK对应关系,但不会存储SK本身,而是存储SK的哈希或加密形式)。
    • 服务端重现客户端的签名过程,使用相同的规范化处理和签名算法,结合查找到的SK,对请求信息进行签名。
    • 将服务端生成的签名与请求中的签名进行比对。
  5. 验证结果处理

    • 如果签名匹配,服务端认为请求是合法的,继续处理请求,并返回相应的响应。
    • 如果签名不匹配,服务端会拒绝请求,通常返回一个错误信息,表明认证失败。
  6. 客户端处理响应
    客户端接收到服务端的响应后,根据响应的内容进行相应的处理。如果是成功的响应,客户端将处理返回的数据;如果是错误响应,客户端将处理错误,可能包括重试或报告错误。

整个过程中,SK从不在网络中传输,确保了即使AK被截获,也不能不配合SK伪造请求。同时,服务端通常会对请求的时间戳进行检查,以避免重放攻击(replay attack),即攻击者截获合法请求并在其他时间重复发送以试图欺骗系统。此外,服务端可能还会检查请求来源的IP地址等其他安全措施,以进一步保障系统安全。

 

参考资料:

posted on 2023-12-11 10:49  jarsing  阅读(431)  评论(0)    收藏  举报