I want to use yahoo contact api. So I try oauth using HMAC-SHA1 algorithm. But I fail to acquire request token. result message : Unable to respond to any of these challenges: {oauth=OAuth oauth_problem=signature_invalid}
package com.naver.address.web.action.ext; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; import com.google.gdata.client.authn.oauth.OAuthException; import com.google.gdata.client.authn.oauth.OAuthHmacSha1Signer; import com.google.gdata.client.authn.oauth.OAuthParameters; import com.google.gdata.client.authn.oauth.OAuthUtil; public class YahooTest { static String key = ""; static String secret = ""; static String callback = ""; static private String requestUrl = "https://api.login.yahoo.com/oauth/ v2/get_request_token"; /** * @param args * @throws OAuthException * @throws IOException */ @SuppressWarnings("unchecked") public static void main(String[] args) throws OAuthException, IOException { OAuthParameters oaup = new OAuthParameters(); oaup.setOAuthCallback(callback); oaup.setOAuthConsumerKey(key); oaup.setOAuthConsumerSecret(secret); oaup.setOAuthNonce(OAuthUtil.getNonce()); oaup.setOAuthTimestamp(OAuthUtil.getTimestamp()); oaup.setOAuthSignatureMethod("HMAC-SHA1"); oaup.setRealm("yahooapis.com"); String baseString = OAuthUtil.getSignatureBaseString(requestUrl, "GET", oaup .getBaseParameters()); OAuthHmacSha1Signer sgner = new OAuthHmacSha1Signer(); String signature = (sgner.getSignature(baseString, oaup)); oaup.setOAuthSignature(signature); Map params = new LinkedHashMap(); params.put(OAuthParameters.OAUTH_CONSUMER_KEY, oaup.getOAuthConsumerKey()); params.put(OAuthParameters.OAUTH_SIGNATURE_METHOD_KEY, oaup .getOAuthSignatureMethod()); params.put(OAuthParameters.OAUTH_SIGNATURE_KEY, oaup.getOAuthSignature()); params.put(OAuthParameters.OAUTH_TIMESTAMP_KEY, oaup .getOAuthTimestamp()); params.put(OAuthParameters.OAUTH_NONCE_KEY, oaup.getOAuthNonce()); params.put("oauth_version", "1.0"); params.put(OAuthParameters.OAUTH_CALLBACK_KEY, oaup.getOAuthCallback ()); String aHeader = getAuthorizationHeader(oaup.getRealm(), params); System.out.println("HEader " + aHeader); Header hdr = new Header("Authorization", aHeader); HttpClient httpClient = new HttpClient(); GetMethod method = new GetMethod(requestUrl); method.addRequestHeader(hdr); method.addRequestHeader("content-type", "application/x-www-form- urlencoded"); httpClient.executeMethod(method); System.out.println(method.getResponseBodyAsString()); } public static String percentEncode(String s) { if (s == null) { return ""; } try { return URLEncoder.encode(s, "UTF-8") // OAuth encodes some characters differently: .replace("+", "%20").replace("*", "%2A") .replace("%7E", "~"); // This could be done faster with more hand-crafted code. } catch (UnsupportedEncodingException wow) { throw new RuntimeException(wow.getMessage(), wow); } } /** * Construct a WWW-Authenticate or Authentication header value, containing * the given realm plus all the parameters whose names begin with "oauth_". */ @SuppressWarnings("unchecked") public static String getAuthorizationHeader(String realm, Map parameters) throws IOException { StringBuilder into = new StringBuilder(); if (realm != null) { into.append(" realm=\"").append(percentEncode(realm)).append('"'); } if (parameters != null) { for (Iterator iterator = parameters.entrySet().iterator(); iterator.hasNext();) { Map.Entry parameter = (Map.Entry) iterator.next(); String name = parameter.getKey().toString(); if (name.startsWith("oauth_")) { if (into.length() > 0) into.append(",\n"); into.append(" "); into.append(percentEncode(name)).append("=\""); into.append(percentEncode(parameter.getValue().toString())).append ('"'); } } } return "OAuth \n" + into.toString(); } } Of course, I have consumer key, secret, callbak please help me --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "OAuth" group. To post to this group, send email to oauth@googlegroups.com To unsubscribe from this group, send email to oauth+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/oauth?hl=en -~----------~----~----~----~------~----~------~--~---