感谢调查我的问题。
我的Android应用程序想要与一个API端点进行对话,该端点要求所有API请求都使用PEM格式的API密钥和私钥进行签名。当我使用记事本打开.pem文件时,内容似乎包裹在“ ---- BEGIN RSA PRIVATE KEY ---”和“ ------ END RSA PRIVATE KEY ---”标签中。>
我正在使用Retrofit库客户端进行网络调用。我已经配置了OkHttpClient拦截器以进行拦截,并向传出请求中添加了“ Authorization”标头。
OkHttpClient代码如下:
OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient().newBuilder();
okHttpClientBuilder.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
Log.d(TAG, "Request body: " + originalRequest.body());
Request.Builder builder = originalRequest.newBuilder().header("Authorization",
signAndGetHeaderString(context));
Request newRequest = builder.build();
return chain.proceed(newRequest);
}
});
signAndGetHeaderString()看起来像这样:
private String signAndGetHeaderString(Context context) {
try {
Signature s = Signature.getInstance("SHA256withRSA");
s.initSign(getPrivateKey(context));
s.update(new Date().toString().getBytes());
byte[] signature = s.sign();
String headerStr = "Signature keyId=\"" + API_KEY + "\",algorithm=\"rsa-sha256\",signature=\"" + new String(ByteString.encodeUtf8(new String(signature)).base64()) + "\"";
return headerStr;
}catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
代码可以编译并执行,但仍然失败,并显示401未经授权错误。
我已验证并确认凭据可以正常运行。 知道为什么它会失败吗?感谢您的帮助。