Comment puis-je utiliser OAuth pour se connecter à l'Etrade API?
E-Commerce de la sortie de leur API récemment et a fourni la documentation technique qui est quelque chose d'utile mais pas complet.
Quelqu'un aurait-il un travail entièrement exemple en C# qui montre comment cela fonctionne?
J'ai été en mesure d'utiliser le système d'authentification OAuth correctement, mais quand il s'agit d'obtenir des informations de mon compte ou des données de marché, les serveurs de l'échec.
- Avez-vous jamais comprendre quoi que ce soit à ce sujet?
- Je suis encore à essayer d'obtenir l'Access_Token de travail. Je suis capable de faire la Request_Token, mais obtenir la "Signature non Valide" lors de l'envoi de l'Access_Token demande. Je crois que c'est parce que le hachage de la clé (consumer_secret & token_secret) est getter de 64 caractères. Une fois que je suis autour de ce problème, je serai au même point où vous en êtes. -Pat
Vous devez vous connecter pour publier un commentaire.
J'ai été en mesure de se connecter à l'aide de la DevDefined OAuth Bibliothèque, mais j'ai dû faire quelques tweeks à la source de l'obtenir pour fonctionner correctement. Je bifurquais le repo ainsi, vous pouvez télécharger la src que j'ai utilisé, et vous construire un .dll.
Repo: GitHub
Exemple De Classe:
Voici le code que j'ai utilisé pour se connecter à l'ETrade API (testé et fonctionne).
Une mise en garde: Vous devez mettre en place votre propre stockage de jetons utilisateur. Je n'ai pas compris qu'ici, depuis le code que j'ai créé est très spécifique au domaine.
Tout d'abord, j'ai ajouté
DotNetOpenAuth
pour le projet et a créé unETradeConsumer
(il dérive de DotNetOpenAuth de WebConsumer):EtradeConsumer.cs
Deuxièmement, vous avez besoin de créer une classe pour gérer Etrade jetons. Comme un exemple, j'ai créé la classe suivante. Il gère les jetons grâce à un InMemoryCollection, mais il devrait vraiment être détenu quelque part d'autre (une base de données, ou d'un cookie, ou quelque chose, de sorte que l'utilisateur n'a pas à s'authentifier/autoriser à chaque fois). Le
ConsumerKey
etConsumerSecret
les jetons sont des choses que vous vous inscrivez à travers Etrade:Enfin, placez le code suivant dans (j'ai utilisé ASP.NET MVC 3. Votre cadre peut varier):
Si vous obtenez une
400 Bad Request
, prendre lacallbackUrl
pour Etrade. Pour une raison quelconque, il jette un mauvais demande à chaque fois qu'une URL de callback qui est utilisé. Ils préfèrentoob
(Hors Bande). Afin d'utiliseroob
, ensemblenull
à l'URL de Callback dans leConsumer.Channel.Send()
méthode.Il y a d'autres questions. Cette question:
Due to a logon delay or other issue, your authentication could not be completed at this time. Please try again.
est causée par leauthorize
partie de l'appel n'étant pas traitées correctement. Plus précisément, Etrade exige que l'autoriser l'URL se présente comme suit:https://us.etrade.com/e/t/etws/authorize?key={yourConsumerKey}&token={requestToken}
La OAuth spécification exige que le jeton de demande doit être
request_token={requestToken}
et pastoken={requestToken}
.Je ne pouvais pas la Etrade API pour autoriser correctement avec le
WebConsumer
mais une fois que je suis passé à laDesktop Consumer
et manipulé la demande moi-même, il a fonctionné correctement.token
partie dans l'url : us.etrade.com/e/t/etws/authorize?key={yourConsumerKey}&token={requestToken} pourrequest_token
de cette façon : us.etrade.com/e/t/etws/authorize?key={yourConsumerKey}&request_token={requestToken} ? Qui n'a pas trop de travail pour moi.token
; c'est ce que votre URL doit avoir pour eux. Il n'était pas clair dans ma réponse que je faisait remarquer qu'ils ont dévié de la spec.TokenManager
est en faitETradeTokenManager
; je ne suis pas du tout sûr de plus, cela fait des années depuis que j'ai eu accès à ce code; leETradeAuthorizeViewModel
IIRC est juste une valeur de clé de sac de la sortie de l'Etrade appels (ou d'entrée, je ne me souviens jamais).Si vous obtenez
"En raison d'un délai d'ouverture de session ou d'un autre problème d'authentification n'a pas pu être terminé à ce moment. Merci d'essayer de nouveau.",
alors je pense que vous mettez mauvaises touches autoriser url.
Vous devez suivre le document en remplaçant les touches appropriées dans ce format
https://us.etrade.com/e/etws/authorize?key=&token=
Pour utiliser l'exemple de la classe + GitHub du code de jejernig réponse, j'ai utilisé les éléments suivants:
J'ai juste enlevé le
abstract
deBaseOAuthRepository
, et de fixer le GitHub de code carIOAuthSession.GetUserAuthorizationUrlForToken()
's paramètres ont été inversés (j'ai changé le reste du code pour correspondre à l'interface des paramètres).Je suis le redoutable
Due to a logon delay or other issue, your authentication could not be completed at this time. Please try again.
message, mais cela peut être dû à une ouverture de session réel problème que je dois résoudre.Effacer les cookies et essayez à nouveau. Je ne suis pas sûr, pourquoi cela se produit. Mais, une fois que vous obtenez cette erreur, sauf si vous désactivez les cookies, vous obtiendrez la même erreur. Je suis en mesure de vous connecter avec succès et appeler le RESTE des services.