我在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
参数?