Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Twitter oauth Request Token Response code 401

I am working on a twitter oauth login. However, when I do the request_token, the very first step, the response code always return 401 Unauthorized.

I have searched a lot for a week, but I cannot find the solution, please help.

Here is my connection:

URL url = new URL("https://api.twitter.com/oauth/request_token");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestProperty("Host","api.twitter.com");
conn.setRequestProperty("Authorization", data);
conn.setRequestMethod("POST");
conn.connect();

For my data:

String data = "OAuth oauth_nonce=\"" + oauth_nonce
    + "\", oauth_callback=\"" + oauth_callback
    + "\", oauth_signature_method=\"" + oauth_signature_method
    + "\", oauth_timestamp=\"" + oauth_timestamp
    + "\", oauth_consumer_key=\"" + oauth_consumer_key
    + "\", oauth_signature=\"" + oauth_signature
    + "\", oauth_version=\"" + oauth_version + "\"";  

Also, I am sure that my signature is right, because I used the parameter of twitter example, I can calculate the same result as its example, so I think my method is right.

Here is my calculation:

String oauth_para = "oauth_callback=" + oauth_callback
    + "&oauth_consumer_key=" + oauth_consumer_key
    + "&oauth_nonce=" + oauth_nonce
    + "&oauth_signature_method=" + oauth_signature_method
    + "&oauth_timestamp=" + oauth_timestamp
    + "&oauth_version=" + oauth_version;

String signingRequests = "POST&" + requestToken + "&" + URLEncoder.encode(oauth_para, "UTF-8");

String key = oauth_consumer_secret + "&";
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");

Mac mac = null;
try {
    mac = Mac.getInstance("HmacSHA1");
    mac.init(signingKey);
}
catch(Exception e) {
    System.err.println("Error: " + e);
}
byte[] rawHmac = mac.doFinal(signingRequests.getBytes());

String oauth_signature =  Base64.encodeBytes(rawHmac);
oauth_signature = URLEncoder.encode(oauth_signature);

I understand that the nonce and timestamp should be random and unique. So, my method is like that:

StringBuffer buffer = new StringBuffer("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); 
StringBuffer sb = new StringBuffer(); 
Random r = new Random(); 
int range = buffer.length(); 
for (int i = 0; i < 43;i ++) { 
    sb.append(buffer.charAt(r.nextInt(range))); 
} 
long epoch = System.currentTimeMillis() / 1000;
String oauth_nonce = sb.toString();

Can somebody help me?

P.S: I have also removed my apps, and then create a new one. The result also is the same. Also, the apps is write and read already.

like image 384
Ian Avatar asked Sep 10 '10 02:09

Ian


People also ask

How can I get OAuth token from Twitter?

Generating access tokensLogin to your Twitter account on developer.twitter.com. Navigate to the Twitter app dashboard and open the Twitter app for which you would like to generate access tokens. Navigate to the "Keys and Tokens" page. Select 'Create' under the "Access token & access token secret" section.

What is request token in Twitter?

The Request utility token, referred to as REQ, ensures the performance and stability of the Request network. Request (REQ) @RequestNetwork.

What is Twitter OAuth?

OAuth 1.0a allows an authorized Twitter developer App to access private account information or perform a Twitter action on behalf of a Twitter account.

How do I get my Twitter bearer token?

Login to your Twitter account on developer.twitter.com. Navigate to the Twitter App dashboard and open the Twitter App for which you would like to generate access tokens. Navigate to the "keys and tokens" page. You'll find the API keys, user Access Tokens, and Bearer Token on this page.


1 Answers

hey,,, I was getting the same problem 1 min ago, but I figured this out. My problem, at least, was that in the configuration of the application(inside twitter), my application type was Client, when should be Browser! So I changed to Browser, put a callback URL and worked fine!!

like image 116
Arthur Neves Avatar answered Oct 04 '22 13:10

Arthur Neves