Twitter-oauth-Request-Token-Response-code 401

Arbeite ich an einem twitter-oauth-login. Allerdings, wenn ich die request_token, der allererste Schritt, den response-code immer wieder 401 Unauthorized.

Ich suchte eine Menge für eine Woche, aber ich kann nicht finden die Lösung, bitte um Hilfe.

Hier ist meine Verbindung:

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();

Für meine Daten:

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 + "\"";  

Ich bin mir auch sicher, dass meine Signatur richtig ist, weil ich die parameter der twitter-Beispiel kann ich berechnen das gleiche Ergebnis wie bei seinem Beispiel, so dass ich denke, meine Methode ist die richtige.

Hier ist meine Berechnung:

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);

Ich verstehe, dass die nonce und timestamp werden sollten, zufällig und einzigartig. Also, meine Methode ist so:

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();

Kann mir jemand helfen?

P. S: ich habe auch entfernt, meine apps, und dann eine neue erstellen. Das Ergebnis ist das gleiche. Auch die apps schreiben und Lesen schon.

  • Stellen Sie sicher, dass Ihre Server-Zeit synchronisiert, um innerhalb von fünf Minuten von den Twitter-Servern.
  • Wenn Sie bauen Ihr signing requests string was ist der Wert der requestToken? Es sollte leer sein, da dies der erste Schritt des OAuth-Prozess.
  • Hatten Sie schon einmal diese arbeiten, Ian? Ich habe die gleichen Probleme (401).
  • Bekomme ich diese zu arbeiten plötzlich. Ich denke, es gibt einige Probleme mit der token generiert, bitte überprüfen Sie das token korrekt ist oder nicht. Und Ihre app-Domäne-Konfiguration sollte entsprechend festgelegt werden.
InformationsquelleAutor Ian | 2010-09-10
Schreibe einen Kommentar