OAuth-Anfragen an die Ubuntu One-Cloud geben eine leere Antwort zurück?

OAuth-Anfragen an die Ubuntu One-Cloud geben eine leere Antwort zurück?

Ich entwickle derzeit eine Ubuntu-Bada-App. Ich kann die Token über die API abrufen, aber wenn ich versuche, einen anderen Teil der API anzufordern, erhalte ich nur ein leeres Browserfenster oder es wird kein Ereignis im HTTP-Listener der App ausgelöst.

Meine Anfrage-URL sieht folgendermaßen aus:

https://one.ubuntu.com/api/file_storage/v1?oauth_consumer_key=abc&oauth_token=def&oauth_nonce=xdobeqcqyfjnzjsh&oauth_timestamp=1328656660424&oauth_signature_method=PLAINTEXT&oauth_version=1.0&oauth_signature=uvw%26xyz

Ich habe die Parameter auf verschiedenen Seiten gefunden und bin nicht sicher, ob sie gültig sind.

Vielen Dank für Ihre Hilfe!!

Antwort1

Sie müssen die Token-Details verwenden, die Sie benötigen, umunterschreiben Sie die Anfragemit dem OAuth-Protokoll.

Hier ist ein Beispiel für ein Python-Skript, das unter Ubuntu ausgeführt werden kann. Es signiert eine URL und druckt diese URL dann aus. Wenn Sie diese URL dann anfordern, sollte es funktionieren.

Sagen Sie mir Bescheid, wenn das immer noch problematisch ist. (Hinweis: Die API gibt Daten als Inhaltstyp zurück application/json, daher werden diese möglicherweise nicht in einem mobilen Browser geladen.)

import oauth, urlparse, sys
from ubuntuone.couch.auth import *
if __name__ == "__main__":
  # If you already have token details, then use them here; you'll need
  # access_token, token_secret, consumer_key, and consumer_secret. This
  # script fetches them from a running Ubuntu instead.
  try:
      credentials = get_oauth_credentials()
  except CredentialsNotFound:
      print "COULDN'T GET CREDENTIALS"
      sys.exit()
  access_token = credentials['token']
  token_secret = credentials['token_secret']
  consumer_key = credentials['consumer_key']
  consumer_secret = credentials['consumer_secret']

  # Now we have token details; let's use them to sign a request.

  token = get_oauth_token(access_token, token_secret)
  consumer = oauth.OAuthConsumer(consumer_key, consumer_secret)

  url = "https://one.ubuntu.com/api/file_storage/v1"
  request_body = ""
  signature_method = HMAC_SHA1

  parameters = {}
  query = urlparse.urlparse(url)[4]
  for key, value in urlparse.parse_qs(query).items():
      parameters[key] = value[0]

  request_len = len(request_body) if request_body else 0
  timeout = 10 * (request_len / 1024 / 1024 + 1)  # 10 seconds per megabyte

  oauth_request = oauth.OAuthRequest.from_consumer_and_token(
      http_url=url,
      http_method="GET",
      oauth_consumer=consumer,
      token=token,
      parameters=parameters)
  oauth_request.sign_request(signature_method, consumer, token)
  print oauth_request.to_url()

verwandte Informationen