web-dev-qa-db-fra.com

Comment dois-je implémenter OAuth pour une application?

Je crée une application pour un client qui doit effectuer les tâches suivantes:

  • Autoriser les utilisateurs à s'authentifier via Google, Facebook, Twitter et LinkedIn.
  • Autoriser les utilisateurs à ajouter des fournisseurs supplémentaires après leur inscription. (c.-à-d. si l'utilisateur s'authentifie auprès de Google, il devrait également pouvoir ajouter tout ou partie des autres fournisseurs.)
  • Autorisez les utilisateurs à importer des contacts Google, des listes d'amis Facebook, des abonnés Twitter et des amis Linkedin afin de créer une liste de contacts personnalisée.

Où est le meilleur endroit pour commencer à apprendre à ce sujet? Existe-t-il une norme que tout le monde utilise pour ces choses dans .NET? Je suis sur Google depuis quelques heures et bien qu'il semble que la plupart des gens pointent vers DotNetOpenAuth Je n'arrive pas à trouver de didacticiels solides sur l'utilisation de la bibliothèque. Le téléchargement est fourni avec des échantillons, mais il m’embrouille toujours.

J'ai supposé que ce serait aussi simple que:

  • Configurez les secrets des fournisseurs.
  • Commencer la connexion avec le fournisseur
  • Authentifier l'utilisateur avec un cookie d'authentification
  • Créer un enregistrement d'utilisateur dans ma base de données et stocker un identifiant unique auprès du fournisseur.

Mais il semble que chaque fournisseur ait son propre jeu de code, et tout est si différent et déroutant. Facebook contient des objets graphiques, Twitter des "InMemoryTokenManager" que je ne comprends pas et Google ne dispose même pas d'un exemple d'authentification, mais d'un exemple de carnet d'adresses Google. Et en plus de tout cela, vous devez copier des morceaux de code d'une démo ApplicationBlock des exemples dans votre propre application pour une raison quelconque, et le faire compiler sans savoir ce que cela essaye de faire est une tâche ardue.

Je sens que je manque quelque chose de fondamental avec tout cela.

Même une recommandation de livre serait formidable à ce stade.

Je crois comprendre les concepts de haut niveau d'OAuth, mais une fois que j'essaie de plonger dans les détails, je me perds immédiatement.

13
Chev

Premièrement, il n’ya vraiment aucun intérêt à utiliser des bibliothèques externes si vous êtes sur net 4.5 où le modèle par défaut asp.net est fourni avec un code d’authentification pour la plupart des fournisseurs mentionnés.

Deuxièmement, si vous avez encore besoin d’un bon tutoriel sur certains détails de l’authentification oauth2, jetez un coup d’œil à cet article de Ben Foster http://ben.onfabrik.com/posts/oauth-providers

Troisièmement, malheureusement, si vous avez besoin d'autre chose que l'authentification, il n'y a pas de protocole unique. Ainsi, chaque fournisseur a sa propre manière d’exposer ces données supplémentaires - contacts, publications, etc. Vous ne pouvez pas y faire grand-chose, cela n’a rien à voir avec oauth2, il s’agit simplement d’une manière d’invoquer une API spécifique qui, par hasard, est souvent utilisée. exposés en tant que services Web repos/xml basés sur l’authentification oauth2. Cela signifie que si vous n'effectuez qu'une authentification, le protocole est généralement le même pour chaque fournisseur. Quelque chose de plus est spécifique.

Quatrièmement, je me contenterais de l'adresse électronique renvoyée par un fournisseur plutôt que d'un identifiant interne. Tous les fournisseurs ne prennent pas en charge l'identifiant alors qu'ils peuvent tous renvoyer le courrier électronique de l'utilisateur. Et vous pouvez faire confiance à ces informations lorsque les fournisseurs vérifient leurs e-mails avant de les renvoyer via oauth2.

6
Wiktor Zychla

Je suggère que vous utilisiez World Domination de PureKrome, son utilisation est simple, bien documentée et très agréable!

https://github.com/PureKrome/WorldDomination.Web.Authentication

Il gère Twitter, Google, Facebook et autres avec de simples configurations en une ligne et gère tout le reste.

Le créateur traîne également autour de n jabbr.net.

2
Moo

Le modèle 'Internet Application' ASP.NET MVC 4 a DotNetOpenAuth implémenté, vous devriez l'examiner si vous ne l'avez pas déjà fait.

1
Malcolm O'Hare

Jetez un coup d'oeil au projet Social Bootstrap API (il utilise servicestack, mais il est agréable de voir toutes ces technologies de mots à la mode fonctionner ensemble dans un échantillon lisible).

De plus, si vous voulez mieux comprendre le fonctionnement d’OAuth, Mashape a une bonne explication . Cela vous donnera un aperçu des éléments cachés que la plupart des emballeurs mettent en œuvre.

Rick Strahl a un exemple que j’avais utilisé il ya des années pour implémenter OpenID dans MVC. C'est un peu démodé mais c'était l'une des implémentations les plus simples à l'époque. Plusieurs sites clients que j'ai construits avec cette implémentation fonctionnent toujours correctement.

0
Zachary Yates