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 [email protected]
To unsubscribe from this group, send email to [email protected]
For more options, visit this group at http://groups.google.com/group/oauth?hl=en
-~----------~----~----~----~------~----~------~--~---