2010-06-16 8 views
1

J'ai eu beaucoup de chance avec DotNetOpenAuth pour faire une autorisation à 3 pattes. Actuellement, je me connecte et j'intègre certaines données de Google.DotNetOpenAuth pour un site précédemment autorisé

Ma question est que, apparemment, si vous avez déjà auth'd mon application Web à votre compte Google, quand je l'appelle

var accessTokenResponse = google.ProcessUserAuthorization(); 

Il ne fondamentalement rien. Comment puis-je obtenir le jeton pour un compte qui a déjà été authentifié par mon application? Je ne vois aucun rappel d'aucune sorte.

Je suis en train de me moquer de mon ignorance à propos d'OAuth en général.

Répondre

2

Vous devez remplacer l'exemple InMemoryTokenManager inclus avec DotNetOpenAuth par une implémentation de IConsumerTokenManager de votre choix qui stocke les jetons d'accès et les secrets dans votre base de données. Ensuite, vous passez votre instance de cette interface à la classe WebConsumer et elle recevra tous les jetons et secrets entrants. En appelant le ProcessUserAuthorization ou à l'intérieur de votre classe de gestionnaire de jetons, vous devez également associer les jetons d'accès que vous enregistrez avec le compte d'utilisateur de l'utilisateur actuellement connecté à votre site Web.

Ensuite, lorsque l'utilisateur visite votre site, vous recherchez son compte d'utilisateur dans votre base de données pour obtenir son jeton d'accès. Et vous l'utilisez pour de futures demandes. Votre IConsumerTokenManager fournira le secret de jeton associé requis et la vie sera bonne.

+0

Pour ne pas exécuter une commande ping sur un ancien thread, mais je n'ai pas réalisé que InMemoryTokenManager était un exemple destiné à être remplacé. Cela pourrait expliquer une partie de ma propre réflexion sur l'implémentation OAuth des secrets jetons. Merci! –

+0

Il y a un oeuf facile planté dans l'échantillon 'InMemoryTokenManager' qui est supposé scinder délibérément la construction si elle est levée de l'échantillon et utilisée ailleurs, avec une erreur vous disant de créer la vôtre. Cela n'a-t-il pas fonctionné dans votre cas, @JHubSharp? –

+0

Non. En fait, cela a bien fonctionné pour moi lorsque le SimpleConsumerTokenManager s'est cassé parce qu'il ne tiendrait pas sur le secret du jeton d'accès. Je serais ravi si vous pouviez donner un aperçu de ma question: http://stackoverflow.com/questions/12485117/custom-oauth-client-in-mvc4-dotnetopenauth-missing-access-token-secret –