2011-01-08 1 views
0

Je jouais avec OAuth aujourd'hui et je l'ai implémenté sur mon API. Jusqu'à présent, je consommais les services de mon API avec une application iPhone et je veux toujours le faire mais depuis que j'ai ajouté OAuth il devient de plus en plus difficile à utiliser et je suis confronté à des problèmes.Exposer mon API avec OAuth et la consommer avec une application iPhone

Voici ce que j'ai:

  • côté fournisseur
    • Une petite page fournissant les clés et les clés secrètes aux consommateurs
    • Une page request_token pour donner un jeton à un consommateur
    • Une autoriser une page à donner à un utilisateur le pouvoir d'autoriser l'utilisation d'un jeton
    • Et enfin une page token_access pour changer le jeton de requête dans un jeton d'accès pour accéder à mon A PI
  • Du côté des consommateurs, il y a:
    • une clé à la consommation (générée par une page sur le côté du fournisseur)
    • une clé secrète à la consommation (générée par une page sur le côté du fournisseur)

Voici ce que je peux faire sans aucun problème:

  • Obtenir une demande de jeton
  • Faire l'utilisateur autorise le jeton

Et quand je suis en train de changer ce jeton pour un jeton d'accès je une erreur:

OAuthException2: Signature verification failed (HMAC-SHA1) 

Il semble que je Je manque quelque chose quelque part mais je ne trouve pas quoi! Voici quelque chose d'autre que je trouve dans les journaux qui peuvent être utiles:

reçu de consommation:

Accept: */* 
Accept-Encoding: gzip, deflate 
Accept-Language: en-us 
Authorization: OAuth realm="", oauth_consumer_key="55af183bbbc2c386de3d0cb82a8bc4aa04d2883f9", oauth_token="4ba900b2cb3a6a67c13d0b089874649504d28c069", oauth_signature_method="HMAC-SHA1", oauth_signature="UKJXUjT4ZpEDeWFDVl7%2BUiqOids%3D", oauth_timestamp="1294516337", oauth_nonce="72D5BE27-D4DF-4C93-942F-96DCBCAB3509", oauth_version="1.0" 
Connection: keep-alive 
Cookie: PHPSESSID=676e088f8f13d7a1bb61d2437ee0b2a6 
Host: localhost:8888 
User-Agent: DearStranger/1.0 CFNetwork/485.12.7 Darwin/10.6.0 

Réponse du fournisseur:

X-Powered-By: PHP/5.3.2 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Content-Type: text/plain 

OAuth Verification Failed: Verification of signature failed (signature base string was "GET&http%3A%2F%2Flocalhost%3A8888%2FDearStranger%2Fwebservices%2Foauth%2Faccess_token.php&oauth_consumer_key%3D55af183bbbc2c386de3d0cb82a8bc4aa04d2883f9%26oauth_nonce%3D72D5BE27-D4DF-4C93-942F-96DCBCAB3509%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1294516337%26oauth_token%3D4ba900b2cb3a6a67c13d0b089874649504d28c069%26oauth_verifier%3D1234%26oauth_version%3D1.0"). with Array 
(
    [0] => dd918316d0190cf48d6bd6028ecbd9fc 
    [1] => ec0390f4ce6bbbe6a5f13a651f8b95ff 
    [2] => request 
) 

J'utilise OAuthConsumer sur l'iPhone côté (http://code.google.com/p/oauthconsumer). Y at-il quelque chose que ce cadre fait mal pour me faire obtenir ces erreurs?

Merci pour vos réponses!

Martin

Répondre

0

J'ai finalement découvert que je n'utilisais pas le cadre de OAuthConsumer pour iPhone de la bonne façon. J'essayais de l'utiliser de la même manière que je devrais l'utiliser avec l'API Twitter, mais l'exposition de mon serveur n'a pas les mêmes spécifications que celles de Twitter.

Questions connexes