Spring Boot Oauth1与分段上传的签名不匹配

时间:2019-04-08 12:45:24

标签: java spring-boot oauth

我在Spring Boot中使用OAuth1,除了分段文件上传之外,OAuth进程运行良好。

经过一些调试后,我发现Spring Boot会将MultipartConfigElement对象自动配置到DispatcherServlet中,该对象用于获取Multipart参数。 OAuth1验证签名时,它将首先获取所有参数并使用它们生成字符串signatureBaseString,然后对字符串进行编码并将其与从请求传递的签名进行比较。但是在此之前,MultipartConfigElement将一个名为file的新字段注入到请求参数中,现在在file中将添加一个名为signatureBaseString的额外参数,因此新签名将与旧签名不匹配。

这是HMAC_SHA1SignatureMethod.java包中spring-security-oauth中的匹配代码:

public void verify(String signatureBaseString, String signature) throws InvalidSignatureException {
      ...
  byte[] signatureBytes = Base64.decodeBase64(signature.getBytes("UTF-8"));
  Mac mac = Mac.getInstance(MAC_NAME);
  mac.init(key);
  byte[] text = signatureBaseString.getBytes("UTF-8");
  byte[] calculatedBytes = mac.doFinal(text);
  if (!safeArrayEquals(calculatedBytes, signatureBytes)) {
      throw new InvalidSignatureException("Invalid signature for signature method " + getName());
  }
}

是否可以忽略OAuth1签名匹配中的file参数?

0 个答案:

没有答案