网建设门户网站,python做网站的实例,icp网站负责人,商城网站开发项目分工一、AK/SK概念 Access Key (AK)#xff1a;AK是一个全局唯一的字符串标识符#xff0c;用于标识用户。它类似于用户名#xff0c;但仅用于身份识别#xff0c;并不包含任何秘密信息。 Secret Access Key (SK)#xff1a;SK则是一个高度保密的密钥#xff0c;类似于密码AK是一个全局唯一的字符串标识符用于标识用户。它类似于用户名但仅用于身份识别并不包含任何秘密信息。 Secret Access Key (SK)SK则是一个高度保密的密钥类似于密码用于对发送至服务的请求进行签名。每个AK都有一个对应的SK它们成对出现共同完成安全认证过程。 签名算法与认证流程 在AK/SK认证中客户端使用SK对HTTP请求的内容包括但不限于请求方法、URL路径、参数、时间戳等进行特定的哈希运算生成一个签名Hutool封装的签名算法。这个签名随请求一起发送到服务端服务端收到请求后利用存储的对应AK的SK以同样的规则计算签名然后比较两者是否一致以此来验证请求的完整性和发送者的身份。
二、AK/SK认证流程 创建与管理AK/SK用户通过注册等方式等到访问密钥对AK/SK并下载保存。一般SK通常只在首次创建时展示一次之后不可再查看只能重新生成新的密钥对也是为了保证安全 构建带有签名的请求客户端在发起API请求前会先根据预定义的规范签名算法使用SK对请求参数进行签名处理。 发送请求与鉴权签名后的请求通过HTTP头字段如Authorization等携带鉴权信息发送给服务端服务端接收到请求后从请求头取出AK并查找出其关联的SK然后使用此SK按照相同的签名算法生产签名判断和客户端SK生成的签名是否一致我们需要获取用户传递的 accessKey 和 secretKey。对于这种数据建议不要直接在 URL 中传递而是选择在请求头中传递会更为妥当。因为 GET 请求的 URL 存在最大长度限制如果你传递的其他参数过多可能会导致关键数据被挤出。因此建议从请求头中获取这些数据 响应与权限控制验证通过后服务端会执行请求的操作并返回相应的响应内容若签名验证失败则拒绝请求并返回错误提示。
三、请求重放安全问题
在AK/SK认证机制中请求重放安全问题是指攻击者截获并重复发送之前的有效请求来假冒合法用户执行操作。为了防止这种攻击服务端需要通常采用多种策略来确保API调用的一次性和不可重放性 时间戳和有效期在签名过程中包含时间戳信息并且服务端会检查该时间戳是否在一定的时间窗口内比如几分钟。超过这个时间范围的请求将被拒绝这样就阻止了过期请求的重放。 唯一请求ID为每个请求生成一个唯一的标识符并将其纳入签名内容中。服务端会跟踪已处理过的请求ID当收到相同的请求ID时将拒绝处理以防止重放攻击。 序列号或nonce使用递增的序列号或者一次性随机值nonce作为请求的一部分进行签名服务端会验证每个新请求的序列号或nonce未被使用过。