我已经使用okhttp-aws-signer库对aws请求进行签名,并使用Android上的Retrofit 2传递了它。我也在lib资源库上问这个问题 https://github.com/babbel/okhttp-aws-signer/issues/1
每次进行Retrofit API调用时都会出错。秘密和访问密钥很好,因为它与Postman一起使用。库在Kotlin中,我的应用程序在Java中,但是我认为这没有关系,对吗?你能分辨出什么问题吗?
public class AwsSigingHeaderInterceptor implements Interceptor
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request newrequest = request.newBuilder()
.cacheControl(CacheControl.FORCE_NETWORK)
.addHeader("Method", "POST")
.addHeader("Host", request.url().host())
.addHeader("X-Amz-Date", DateUtil.getAwsDate())
.addHeader("Accept", Constants.ACCEPT)
.addHeader("Content-Type", Constants.CONTENT_TYPE_JSON).build();
OkHttpAwsV4Signer okHttpAwsV4Signer = new OkHttpAwsV4Signer(Constants.REGION, Constants.SERVICE_NAME);
newrequest = okHttpAwsV4Signer.sign(newrequest, Constants.ACCESS_KEY_ID, Constants.ACCESS_SECRET_KEY);
return chain.proceed(newrequest);
}
}
这是打包的标头授权密钥,与提到的aws签名者打包在一起。
Authorization: AWS4-HMAC-SHA256 Credential=AKIAIR5PPPODHO6F2NCA/20190207/us-east-1/execute-api/aws4_request, SignedHeaders=accept;cache-control;content-type;host;method;x-amz-date, Signature=5521d5b220cb427ddbcbad5f9bda6bd69043c779e67999d3ee92957e45112479
这是我得到的错误,我应该有一些JSON对象。
{“ message”:“我们计算出的请求签名与您提供的签名不匹配。请检查您的AWS Secret Access密钥和签名方法。有关详细信息,请参阅服务文档...