Я пробовал несколько итераций построителя подписи oauth 1.0.
Ни один из них, кажется, не работает. Я предоставляю код, чтобы увидеть, если кто-то может
посмотри, куда я сбиваюсь.
Посмотрел все, включая переполнение стека, чтобы помочь с этим, и я
перепробовал несколько предложений. Я пытался использовать HTTPRequest
как POSTMAN делает:
public String GetRequest(String Data) throws IOException {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url1)
.get()
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", Data)
.addHeader("cache-control", "no-cache")
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
и я получаю рукопожатие.
Я попытался HttpUrlConnection в сочетании с обеими попытками на
Подпись OAuth ниже:
url = new URL(url1);
HttpURLConnection connn = (HttpURLConnection) url.openConnection();
connn.setRequestProperty("Authorization", token);
connn.setRequestProperty("Content-Type", "application/json");
connn.setRequestProperty("cache-control", "no-cache");
connn.setDoOutput(true);
connn.setRequestMethod("GET");
connn.connect();
int responseCode = connn.getResponseCode();
Я пробовал каждый с одинаковым результатом - ошибка «403».
Я сравнил свою строку подписи с POSTMAN, используя тот же NONCE
и метка времени и моя строка подписи всегда разные. не должны
это будет то же самое? Похоже, что я не делаю что-то в том же
заказать (??) как POSTMAN, когда я создаю свою подпись.
Мне дали все четыре жетона заранее, и мне сказали
что они не истекают.
public static String oauth_consumer_key = "AAAAAAA";
public static String oauth_consumer_secret = "BBBBBBBB";
public static String oauth_request_token = "CCCCCCC";
public static String oauth_request_token_secret = "DDDDD";
public URL url = null;
url1 = "https://my url.com/myapi"
public static String ENC = "UTF-8";
Начало строки Token:
String token = "\"" + "OAuth oauth_consumer_key=" + consumerKeyStr +
"," + "oauth_token=" + accessTokenStr + "," + "oauth_signature_method="
+ signatureMethod + "," + "oauth_timestamp=" + "\"" + TimeStamp + "\""
+ "," + "oauth_nonce=" + "\"" + XXDLIX + "\"" + "," + "oauth_version="
+ sendVersion + "," + "oauth_signature=";
Я попытался создать базовый параметр:
String token3 = "oauth_consumer_key=" + oauth_consumer_key + "," +
"&oauth_nonce=" + XXDLIX.trim() + "," + "&oauth_signature_method=" +
signatureMethod + "," + "&oauth_timestamp=" + TimeStamp + ","
+ "&oauth_token=" + oauth_request_token + "," + "&oauth_version=" +
Oauth_Version;
Построение ключевой строки (не совсем уверен, правильно ли это или если я
нужны оба ключа для этого. В моем исследовании было указание, что я
сделал, так попробовал):
keyString = consumerSecretStr + "&" + accessSecretStr + "&";
keyString = URLEncoder.encode(keyString.trim(), ENC);
и использование:
url2 = URLEncoder.encode(url1.trim(), ENC);
oauth_signature = "";
oauth_signature = getSignature(url2, token3);
oauth_signature = URLEncoder.encode(oauth_signature.trim(), ENC);
public static String getSignature(String url, String params)
throws UnsupportedEncodingException, NoSuchAlgorithmException,
InvalidKeyException {
StringBuilder base = new StringBuilder();
base.append("GET&");
base.append(url);
base.append("&");
base.append(params);
byte[] keyBytes = (keyString.getBytes(ENC));
SecretKey key = new SecretKeySpec(keyBytes, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(key);
return new String(Base64.getEncoder().encode
(mac.doFinal(base.toString().getBytes(
ENC))), ENC).trim();
}
См. Строку Token выше:
String token = token + "\"" + oauth_signature + "\"" + "\"";
Наконец, я попытался создать подпись OAuth:
ArrayList<String> params = new ArrayList<String>();
params.add("oauth_consumer_key=" + oauth_consumer_key);
params.add("oauth_token=" + oauth_request_token);
params.add("oauth_signature_method=" + signatureMethod);
params.add("oauth_timestamp=" + TimeStamp);
params.add("oauth_nonce=" + XXDLIX.trim());
params.add("oauth_version=" + Oauth_Version);
Collections.sort(params);
//I was told they had to be in Alphabetical Order
StringBuffer parametersList = new StringBuffer();
for ( int i = 0; i < params.size(); i++ ){
parametersList.append( ( ( i > 0 ) ? "&" : "" ) + params.get( i ));
}
String token2 = URLEncoder.encode(parametersList.toString(), ENC);
String signatureString = GetMethod + "&" +
URLEncoder.encode(("https://my url" + "&"), ENC) +
(URLEncoder.encode(parametersList.toString(), ENC));
String signature = null;
try{
SecretKeySpec signingKey = new SecretKeySpec(
(keyString.getBytes()), "HmacSHA1" );
Mac mac = Mac.getInstance( "HmacSHA1" );
mac.init( signingKey );
byte[] rawHMAC = mac.doFinal( signatureString.getBytes() );
signature = Base64.getEncoder().encodeToString(rawHMAC);
}
catch ( Exception e )
{
System.err.println( "Unable to append signature" );
System.exit( 0 );
{
См. Строку токена выше:
String token = token + "\"" + signature + "\"";
открытый класс POBWSPOST2 {
public void POSTRequest2(String Data) throws IOException {
XXDLIX = Data.trim();
boolean sendMagento = false;
String inline = null;
TimeStamp = "";
TimeStamp = getTimestamp();
url1 = "https://myURL.com/GetAPI:
String param = "?Authorization=" + oauth_request_token;
keyString = consumerSecretStr + "&" + accessSecretStr + "&";
keyString = URLEncoder.encode(keyString.trim(), ENC);
String jsontext = json_object.toString();
try
{
String token = "\"" + "OAuth oauth_consumer_key=" + consumerKeyStr + ","
+ "oauth_token=" + accessTokenStr + "," + "oauth_signature_method=" + signatureMethod
+ "," + "oauth_timestamp=" + "\"" + TimeStamp + "\"" + "," + "oauth_nonce="
+ "\"" + XXDLIX + "\"" + "," + "oauth_version=" + sendVersion + "," + "oauth_signature=";
String token4 = "\"" + "OAuth realm =" + "\"" + url1 + "\"" + ","
+ "oauth_consumer_key=" + consumerKeyStr + ","
+ "oauth_token=" + accessTokenStr + "," + "oauth_signature_method=" + signatureMethod
+ "," + "oauth_timestamp=" + "\"" + TimeStamp + "\"" + "," + "oauth_nonce="
+ "\"" + XXDLIX + "\"" + "," + "oauth_version=" + sendVersion + "," + "oauth_signature=";
ArrayList<String> params = new ArrayList<String>();
params.add("oauth_consumer_key=" + oauth_consumer_key);
params.add("oauth_token=" + oauth_request_token);
params.add("oauth_signature_method=" + signatureMethod);
params.add("oauth_timestamp=" + TimeStamp);
params.add("oauth_nonce=" + XXDLIX.trim());
params.add("oauth_version=" + Oauth_Version);
Collections.sort(params);
StringBuffer parametersList = new StringBuffer();
for ( int i = 0; i < params.size(); i++ )
{
parametersList.append( ( ( i > 0 ) ? "&" : "" ) + params.get( i ) );
}
String token2 = URLEncoder.encode(parametersList.toString(), ENC);
String signatureString =
GetMethod + "&" + URLEncoder.encode(("https://myUrl.com/myAPI + "&"), ENC) + (URLEncoder.encode(parametersList.toString(), ENC));
String signature = null;
try
{
SecretKeySpec signingKey = new SecretKeySpec(
(keyString.getBytes()), "HmacSHA1" );
Mac mac = Mac.getInstance( "HmacSHA1" );
mac.init( signingKey );
byte[] rawHMAC = mac.doFinal( signatureString.getBytes() );
signature = Base64.getEncoder().encodeToString(rawHMAC);
}
catch ( Exception e )
{
System.err.println( "Unable to append signature" );
System.exit( 0 );
}
String token3 = "oauth_consumer_key=" + oauth_consumer_key + "," + "&oauth_nonce=" + XXDLIX.trim() + ","
+ "&oauth_signature_method=" + signatureMethod + "," + "&oauth_timestamp=" + TimeStamp + ","
+ "&oauth_token=" + oauth_request_token + "," + "&oauth_version=" + Oauth_Version;
try{
url2 = URLEncoder.encode(url1.trim(), ENC);
signature = URLEncoder.encode(signature.trim(), ENC);
oauth_signature = "";
oauth_signature = getSignature(url2, token3);
oauth_signature = URLEncoder.encode(oauth_signature.trim(), ENC);
token = token + "\"" + signature + "\"";
String token6 = token + "\"" + oauth_signature + "\"" + "\"";
//token = token + "\"" + URLEncoder.encode(oauth_signature, ENC) + "\"" + "\"";
url = new URL(url1);
//token = token + OAuthsignature;
//String responsive = GetRequest(token);
//String responsive1 = GetRequest(token6);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpURLConnection connn = (HttpURLConnection) url.openConnection();
connn.setReadTimeout(10000);
connn.setConnectTimeout(15000);
connn.setRequestProperty("Authorization", token);
connn.setRequestProperty("Content-Type", "application/json");
connn.setRequestProperty("cache-control", "no-cache");
connn.setDoOutput(true);
connn.setRequestMethod("GET");
connn.connect();
int responseCode = connn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_CREATED) { //success
BufferedReader in = new BufferedReader(new InputStreamReader(
connn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
} in .close();
// print result
System.out.println(response.toString());
sendMagento = true;
} else {
System.out.println("POST DID NOT WORK");
}
if(connn != null){
connn.disconnect();
}
}
catch (MalformedURLException e4)
{
e4.printStackTrace();
sendMagento = false;
}
catch (IOException e5)
{
e5.printStackTrace();
sendMagento = false;
}
}
public static String getSignature(String url, String params)
throws UnsupportedEncodingException, NoSuchAlgorithmException,
InvalidKeyException {
StringBuilder base = new StringBuilder();
base.append("GET&");
base.append(url);
base.append("&");
base.append(params);
byte[] keyBytes = (keyString.getBytes(ENC));
SecretKey key = new SecretKeySpec(keyBytes, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(key);
return new String(Base64.getEncoder().encode(mac.doFinal(base.toString().getBytes(
ENC))), ENC).trim();
}